2017-08-27 109 views
0

我在我的SSIS包中創建了幾個數據流,它們作爲ETL過程的一部分執行截斷表。我通過配置爲使用服務帳戶的SQL作業運行程序包。SSIS中截斷表的最小權限

我最初爲該服務帳戶提供了該表的ALTER授權,但DBA已經復出說Alter無法使用,並且需要將最小權限分配給服務帳戶以進行截斷。

例如,

use CoreReferenceStaging 
GRANT CONNECT,EXECUTE,SELECT,DELETE, INSERT, UPDATE,ALTER ON database::CoreReferenceStaging TO "INT\svc-w-corerefdata-qa"; 
ALTER AUTHORIZATION ON [PartiesIssuerCreditRating] TO "INT\svc-w-corerefdata-qa"; 

目前我有16個存儲數據流,單獨執行截斷表。 我最初以爲創建了16個包含執行權限的存儲過程,但我覺得它只是一個維護問題,只是每個調用一個截斷表。有沒有更好的方式來做到這一點,或通過分配角色等

你能告訴我最好的辦法來處理這種情況?

+0

如果db僅僅是一個用於移動數據的臨時數據庫,我不明白爲什麼對這個數據庫的權限應該是你的dba的任何問題。如果權限被鎖定到臨時數據庫那有什麼問題? – Tanner

+0

該名稱正在升級,但最終甚至會被某個Web應用程序使用主數據庫。 – Tom

回答

1

要提供最小權限,請在存儲過程中封裝TRUNCATE語句。可以爲需要ALTER TABLE權限的數據庫用戶帳戶指定EXECUTE AS子句,或者使用基於具有權限的用戶的證書對proc進行簽名。有關證書,用戶和TRUNCATE TABLE proc的示例腳本,請參見Erland Sommarskog's article。本文還包含EXECUTE AS與模塊簽名的詳細討論,以通過存儲過程授予權限。

+0

我不喜歡採用存儲過程的方法,因爲我需要創建16個存儲過程併爲每個存儲過程提供權限,或者我必須使存儲過程動態化 – Tom

+0

爲什麼單個存儲過程無法截斷全部16個表動態? –