目前透過 sql server Agent job 執行 SSIS ,一直有權限的問題困擾,
我的 ETL 來源資料自 mysql 資料庫,所以我將 執行 sql server Agent job 的 owner
設定與連線mysql 資料庫的使用者帳號及密碼一致,在 sql server 也同樣新增此帳號,
也擁有對sql server db access 的權限。
將 SSIS 存放在 Integration Service 的封裝區,並以手動方式執行封裝程序,是可以順利的執行完成,
但透過 sql server agent 來執行此 Integration Service 的封裝區 ,就會產生權限的問題,不知是否還有其他的方法 ?
方法 1:使用 SQL Server Agent Proxy 帳戶
建立 SQL Server Agent Proxy 帳戶。這個 Proxy 帳戶必須使用認證,讓 SQL Server Agent 像建立封裝的帳戶或具有必要權限的帳戶一樣執行作業。
這個方法可用於解密並滿足使用者的金鑰需求。然而,這種方法的成功可能有限,因為 SSIS 封裝使用者金鑰包含目前使用者和目前電腦。因此,如果您將封裝移到另一台電腦,即使作業步驟使用正確的 Proxy 帳戶,這種方法仍然可能會失敗。
方法 2:將 SSIS 封裝 ProtectionLevel 屬性設定為 ServerStorage
將 SSIS 封裝 ProtectionLevel 屬性變更為 ServerStorage。這個設定會透過 SQL Server 資料庫角色將封裝儲存在 SQL Server 資料庫中並允取存取控制。
方法 3:將 SSIS 封裝 ProtectionLevel 屬性設定為 EncryptSensitiveWithPassword
將 SSIS 封裝 ProtectionLevel 屬性變更為 EncryptSensitiveWithPassword。這個設定會使用密碼進行加密。然後您可以將 SQL Server Agent 作業步驟命令列修改為加入這個密碼。
方法 4:使用 SSIS 封裝設定檔案
使用 SSIS 封裝設定檔案來儲存機密資訊,然後將這些設定檔案儲存在受安全保護的資料夾中。接著您可以將 ProtectionLevel 屬性變更為 DontSaveSensitive,讓封裝不會加密也不會嘗試將機密儲存在封裝中。當您執行 SSIS 封裝時,會從設定檔案載入必要的資訊。如果設定檔案含有機密資訊,確定它們會受到適當的保護。
方法 5:建立封裝範本
如需長期的解決方案,請建立使用與預設設定不同保護等級的封裝範本。這個問題將不會發生在未來的封裝中。
試試看下面的設定,
將啟動sql server agent service 的windows 帳號,加到目的端server的local admin 群組。如果可行,代表是該啟動帳號對目的端server的的權限不足(縮小問題的範圍,找出原因)。
再判斷該job會需要哪些目的端server的權限(因為我不知道你的job會對目的端server做甚麼動作)。例如只是做備份,那目的端server的備份資料夾要給 "啟動sql server agent service 的windows 帳號" 有寫入的權限。判斷然後將帳號從目的端server的local admin 群組移除,只給該帳號需要的權限即可。