疑難排解:使用 SQL Server Agent 的 SSIS 封裝執行 (SQL Server 影片)

適用於:Microsoft SQL Server Integration Services

作者:Carla Sabotta,Microsoft Corporation

長度:00:12:12

檔案大小:9.50 MB

檔案類型:WMV

觀看此影片

相關說明主題:

從 SQL Server Agent 作業步驟呼叫 SSIS 封裝時,SSIS 封裝並未執行

dtexec 公用程式

如何:加入封裝組態

設定封裝的保護等級

使用 Integration Services 角色

其他影片:

如何:使用 SQL Server Agent 讓 SSIS 封裝執行自動化 (SQL Server 影片)

影片摘要

此影片會為您示範,如果從 SQL Server Agent 作業步驟呼叫封裝,但 SQL Server Integration Services 封裝並未執行時,該如何進行疑難排解。因為封裝是可以在 SQL Server Agent 之外成功執行的。

影片內容

影片時間戳記 音訊

00:00

嗨,我是 Carla Sabotta,Microsoft SQL Server Integration Services 產品文件集的撰寫人員。

我會在本影片中為您示範,如果您從 SQL Server Agent 作業步驟呼叫封裝後,SQL Server Integration Services 封裝並未執行,該如何進行疑難排解。因為封裝是可以在 SQL Server Agent 之外成功執行的。

我們會說明解決此問題的建議作法,包括建立 Proxy 帳戶、修改封裝的 [ProtectionLevel] 屬性設定、將機密資料儲存在封裝組態檔,以及將封裝儲存在 SQL Server msdb 資料庫。

正如您所見,這個作業沒辦法執行 Integration Services 封裝。

當您從 SQL Server Agent 作業步驟呼叫封裝,但封裝並未執行時,往往是因為下列任一種狀況:

  • 以作業步驟執行封裝的使用者帳戶,並不是原本的封裝作者。
    – 或 –
  • 使用者帳戶權限不足,無法連接或存取封裝以外的資源。

從作業步驟呼叫封裝的使用者帳戶,如果不是原本的封裝作者,便可能為因為封裝保護等級導致封裝無法執行。這是因為使用者帳戶無法解密封裝或封裝機密資料,或是無法提供封裝所遺漏的機密資料。

所謂的機密資料,包括像是連接字串的密碼部分,或標示為機密的某個變數等等。

有一些建議的作法可以解決加密和機密資料的問題。

01:53

第一種方法,就是將封裝儲存到 SQL Server msdb 資料庫,並將保護等級設定為 [依賴伺服器儲存體和角色進行存取控制 (Rely on server storage and roles for access control)]。您可以利用 SQL Server Management Studio 中的 Integration Services Service 這麼做。

資料庫角色現在便控制了對封裝的讀寫存取。您必須將任一個 Integration Services 的固定資料庫層級角色,或某個使用者定義的資料庫層級角色,指派為封裝的讀取器角色。固定資料庫層級角色包括 db_ssisadmin、db_ssisoperator 和 db_ssisltduser。在這個示範中,我們要將 db_ssisadmin 指派給封裝。

如果是將固定資料庫層級角色指派給封裝,那麼從作業步驟呼叫封裝的使用者帳戶,必須也要是該角色的成員。如果是將使用者定義的角色指派給封裝,那麼使用者帳戶必須是任一個固定資料庫層級角色以及使用者定義角色的成員。

03:59

第二種方法,是到 Business Intelligence Development Studio 中,將封裝的 [ProtectionLevel] 屬性設定,變更為 [EncryptSensitiveWithPassword]

要存取封裝的 [ProtectionLevel] 屬性,請在封裝控制流程內按一下,再選取 [屬性 (Properties)] 視窗中的 [ProtectionLevel]

接著,您要修改 SQL Server Agent 作業步驟命令列,加入解密機密資料的密碼。您可以使用 dtexec 命令提示字元公用程式的 /Decrypt 參數來加入密碼。SQL Server Agent 作業步驟會使用 dtexec 共用程式來執行封裝。

05:22

解決加密與機密資料的第三種方式,便是同樣使用 Business Intelligence Development Studio,將 [ProtectionLevel] 屬性設定變更為 [DontSaveSensitive]

設定這個屬性設定後,封裝便不再加密,而機密資料也不會隨封裝儲存。因此,您可以使用封裝組態檔來儲存資料。在這個示範中,我們要為 DestinationConnectionOLEDB 連接管理員,儲存其連接字串的密碼。

當 SQL Server Agent 作業步驟執行封裝時,系統便會從之前建立的組態檔中載入機密資料。

請記得要將檔案儲存在受保護的資料夾中。

現在,我們已經知道有哪些建議作法可以解決加密和機密資料的問題。

另一個會導致代理程式作業步驟無法執行封裝的情況,是跟使用者帳戶的權限有關。

也就是使用者帳戶權限不足,無法連接或存取封裝以外的資源。

08:08

若要測試使用者帳戶的權限,您可以開啟命令提示字元視窗,然後執行 RunAs 命令。

請用帳戶認證中儲存的驗證資訊,取代 mydomain\myuser,並在系統提示時輸入帳戶密碼。

我們建議的權限問題解決方法,就是建立一個具有所需權限的SQL Server Agent Proxy 帳戶。這個 Proxy 帳戶也可以解密封裝中的機密資料。

請記住,如果您將封裝移到其他電腦,同時封裝的 [ProtectionLevel] 屬性是設定為 [EncryptSensitiveWithUserKey][EncryptAllWithUserKey] 時,這個方法可能就沒有用了。

09:12

若要建立 Proxy 帳戶,您必須是系統管理員 (sysadmin) 固定伺服器角色的成員。或者,您必須是 msdb 資料庫中 SQLAgentOperatorRole、SQLAgentReaderRole 或 SQLAgentUserRole 的成員。

如果您要建立 Proxy 帳戶,請執行 Transact-SQL 查詢或使用 SQL Server Management Studio 中的 [新 Proxy 帳戶 (New Proxy Account)] 對話方塊。這裡我們就使用 [新 Proxy 帳戶 (New Proxy Account)] 對話方塊吧。

您得在 [一般 (General)] 頁面中,指定新 Proxy 帳戶的名稱和認證。我們就將帳戶命名為 Package proxy,並選取內含驗證資訊、名為「User1」的現有認證。

提醒您,您所選取的認證必須讓 SQL Server Agent 能以建立封裝的帳戶或具有所需權限的帳戶來執行作業。

您也必須指定啟用 Proxy 的子系統。因為作業要執行封裝,我們就選取 [SQL Server Integration Services 封裝] 子系統。

Proxy 描述是選擇性的選項。

[主體 (Principals)] 頁面中,您可以透過新增或移除角色,來授與 Proxy 帳戶的存取權。系統管理員 (sysadmin) 固定伺服器角色的成員則自動具有存取權。

我們為 Proxy 帳戶指定的「User1」認證,就列在 [物件總管] 的 [認證 (Credentials)] 節點下。

若要建立新的認證,您可以執行 Transact-SQL 查詢,或使用 [新增認證 (New Credentials)] 對話方塊。

本影片示範的內容,是從 SQL Server Agent 作業步驟呼叫封裝但封裝不執行時的解決方式。影片內容包括:建立 Proxy 帳戶、修改封裝的 [ProtectionLevel] 屬性設定、將機密資料儲存在封裝組態檔,以及將封裝儲存在 SQL Server msdb 資料庫。

謝謝您觀看本影片,希望您覺得有所收穫,並歡迎您返回網站,觀看其他 Microsoft SQL Server 影片。