Ssis

如何使用代理通過 T-SQL 從 SQL 代理呼叫 SSIS 包

  • March 1, 2015

建構一個包含許多包和一個“控製文件”表的 ETL 框架,以正確的順序編排執行它們並管理錯誤。為了控制數據載入的整體操作,我想這樣做:

  1. 在 SQL 代理中創建作業
  2. 在作業步驟中呼叫自定義儲存過程
  3. 在儲存過程中,呼叫 SSISDB.catalog.create_execution 和相關的procs來執行一個包
  4. 出於安全原因,在不是系統管理員且不是 SQL 代理服務帳戶的專用 ETL Windows 使用者帳戶下執行此操作。

步驟 1、2 和 3 中的所有內容都有效,但如果我嘗試將代理作業步驟配置為作為另一個帳戶或代理執行,則它不起作用。

背景

從具有作業步驟類型“集成服務”的代理作業執行單個包是可行的,因為有一個選項可以將步驟設置為以代理使用者身份執行。(新作業 > 步驟 > 新步驟 > 類型 = 集成服務 > RUN AS)。問題是我們需要“包裝器”邏輯來控制所有這些單獨的包。

從 T-SQL 直接從儲存過程執行包是可行的。

在代理中的 T-SQL 作業 STEP 中從儲存過程執行包,如果該作業由系統管理員擁有,則可以工作,*但它作為 SQL Server 代理服務帳戶執行,*這是一個安全問題。

在代理中的 T-SQL 作業步驟中從儲存過程執行包,如果作業由非系統管理員使用者擁有,則由於代理的 EXECUTE AS 程式碼中的問題而失敗,其中 SSIS 過程拋出類似“不能revert’ - 這讓我相信代理的 EXECUTE AS 邏輯存在問題,該邏輯在作業所有者帳戶下執行 T-SQL,然後呼叫 SSIS 程序。我在網上找到了一些資訊,希望可以重新找到連結。

從 T-SQL 代理作業步驟執行包沒有 RUN AS 功能來設置程式碼以在代理帳戶下執行。這是一個連接項目:-)。

從 T-SQL 代理作業執行包,我在作業步驟程式碼中手動放入 EXECUTE AS 邏輯也不起作用。

樹樁?

我最終在 SQL 代理中使用了一個 PowerShell 步驟來解決這個問題:作業步驟類型“PowerShell”和一個簡短的腳本,它使用 Invoke-Sqlcmd 來呼叫儲存過程。感覺很尷尬,但它可以在備用憑據下工作。

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