Ian*_*ell 5 sql-server proxy ssis execution
我们要求用户使用代理帐户并引用输入参数来执行SSIS包。
以下内容演示了用于调用包执行的语法。
DECLARE @ExportID INT = 1;
DECLARE @ExecutionID INT;
EXECUTE AS [proxy_account]
EXEC [SSISDB].[catalog].[create_execution]
@folder_name = 'DW',
@project_name = 'DW_ETL',
@reference_id = NULL,
@use32bitruntime = 1,
@execution_id = @ExecutionID OUTPUT;
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id = @ExecutionID,
@object_type = 30,
@parameter_name = 'ExportID',
@parameter_value = @ExportID;
EXEC [SSISDB].[catalog].[start_execution]
@execution_id = @ExecutionID;
REVERT
Run Code Online (Sandbox Code Playgroud)
这导致以下错误消息:
当前的安全上下文无法还原。请切换到调用“ Execute As”的原始数据库,然后重试。
跟踪代码后,在SSISDB.catalog.start_execution和SSISDB.internal.prepare_execution存储过程中找到了以下代码
EXECUTE AS CALLER
...
REVERT
Run Code Online (Sandbox Code Playgroud)
这导致语句失败,因为该语句将覆盖尝试指定的代理帐户。通过注释掉REVERT语句SSISDB.catalog.start_execution和SSISDB.internal.prepare_execution,代码跑成功地执行作为代理帐户。
我不热衷于绕开开发人员出于某种原因而放入的代码的想法,但是我需要一种方法来通过存储过程作为代理帐户执行语句,并且该方法有效。谁能建议使用不引用REVERT 的SSISDB.catalog.start_execution和SSISDB.internal.prepare_execution存储过程的替代版本是否有任何后果?
谢谢,
伊恩
要以与 SSISDB 不同的用户身份执行 SSIS 包,您需要利用 SQL Server 代理中的某些功能。
您需要创建一个对 SSIS 数据库具有 db_datareader 访问权限的凭据。您需要设置一个有权执行集成服务包的代理。
最后,一旦您完成了这些先决条件设置,您就可以创建一个 SQL Server 代理作业,该作业以您设置的任何代理帐户的身份从 Integration Services 目录运行您的 SSIS 包。
这是一篇文章,提供了有关如何设置我上面描述的内容的更详细方法: https: //www.mssqltips.com/sqlservertip/2163/running-a-ssis-package-from-sql-server-agent-使用代理帐户/
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |