小编Ian*_*ell的帖子

以与SSISDB不同的用户身份执行SSIS包

我们要求用户使用代理帐户并引用输入参数来执行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_executionSSISDB.internal.prepare_execution存储过程中找到了以下代码

EXECUTE AS CALLER
...  
REVERT
Run Code Online (Sandbox Code Playgroud)

这导致语句失败,因为该语句将覆盖尝试指定的代理帐户。通过注释掉REVERT语句SSISDB.catalog.start_executionSSISDB.internal.prepare_execution,代码跑成功地执行作为代理帐户。

我不热衷于绕开开发人员出于某种原因而放入的代码的想法,但是我需要一种方法来通过存储过程作为代理帐户执行语句,并且该方法有效。谁能建议使用不引用REVERT 的SSISDB.catalog.start_executionSSISDB.internal.prepare_execution存储过程的替代版本是否有任何后果?

谢谢,

伊恩

sql-server proxy ssis execution

5
推荐指数
1
解决办法
1217
查看次数

标签 统计

execution ×1

proxy ×1

sql-server ×1

ssis ×1