Sql-Server

如何使用 TSQL 以不同使用者身份執行 SSIS 目錄包?

  • October 16, 2018

我們一直在將應用程序包從舊的儲存和執行方法移到 SSIS 目錄中。我們需要使用企業調度系統而不是 SQL Server 代理來執行批處理作業和 SSIS 包。基本上,調度程序在伺服器上打開一個命令行並執行 Windows 命令。在我們的例子中,我們將使用 SQLCMD 來執行如下所示的儲存過程。

這是我需要能夠做的事情:

創建過程 usp_Execute_Packages @Package_name NVARCHAR(260) WITH EXECUTE AS ‘Domain\User’ AS DECLARE @execution_id bigint

執行

$$ SSISDB $$.$$ catalog $$.$$ create_execution $$@package_name=@Package_name,@execution_id=@execution_id 輸出,@folder_name=N’A 文件夾名稱’,@project_name=N’測試部署’ 執行

$$ SSISDB $$.$$ catalog $$.$$ start_execution $$@execution_id

去 但是,這似乎不起作用;我收到一條錯誤消息,告訴我無法使用 SQL Server 帳戶開始執行。我認為 EXECUTE AS 語句有問題。任何想法如何在不使用 SQL Server 代理和代理帳戶的情況下以其他使用者身份啟動包執行?

如果您在 SSISDB 中創建儲存過程,然後在儲存過程中添加EXECUTE AS語句,您可以將包作為必要的登錄名執行,這就是您的目標。正如@sepupic 所指出的,EXECUTE AS在 SP 的標題中添加僅適用於數據庫使用者。

USE SSISDB;
GO

CREATE PROCEDURE usp_Execute_Packages 

AS BEGIN 

EXECUTE AS LOGIN = 'Domain\YourLogin'

Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'YourPackage.dtsx',
@execution_id=@execution_id OUTPUT, @folder_name=N'Your Folder', @project_name=N'YourProject', 
@use32bitruntime=False, @reference_id=Null

Select @execution_id

DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=50,
@parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[start_execution] @execution_id


END

引用自:https://dba.stackexchange.com/questions/220177