2010年2月7日 星期日

封裝的Protection Level

以前在Business Intelligence Development Studio 設計SSIS封裝時,不太了解Protection Level的差異,都用預設的,結果明明在BIDS執行成功的,佈署到SQL Server上後執行就失敗,想說SSIS怎麼那麼難用啊,封裝設計的還真複雜,之前的DTS簡單多了,但又不能不用,只好研究了一下各Protection Level的差別囉

我就一一設定不同Protection Level,除了ServerStorage以外,因為這是部署到msdb上才會用的,存檔後看看封裝檔案dtsx的大小,與dtsx內容跟連線密碼有關的部分,還有用Dtexecui執行的狀況,整理如下圖

什麼時候用哪個Protection Level呢?我覺得可以分成三種情況來說

第一種是自己用,如果是自己用,通常測試的只會給自己用吧,不會給別人用,也不會佈署到Server上,那我就會用EncryptSensitiveWithUserKey或EncryptAllWithUserKey,兩個只差在加密的範圍而已,好處是很方便,可以直接執行與編輯,但前提是都用同一個系統登入的帳號才行,不像其他三個得輸入密碼或是還得指定連線密碼才能執行成功囉,還有就是比較安全囉,別人拿到也打不開

第二種就是給人用,給人用的就是選EncryptAllWithPassword或EncryptSensitiveWithPassword吧,差別也是加密的範圍囉,只要別人也知道密碼,就可以編輯與執行,不知道密碼的拿到可能打不開或是打開時機密資訊不見了

第三種就是佈署到到MSDB上用,這種不是沒得選嗎?直接用ServerStorage,我這邊是提佈署前要用什,除了用DontSaveSensitive以外其他都可,因為看上圖,右邊ConnectionManager裡並沒有存放密碼資訊,若你先用DontSaveSensitive再換成ServerStorage上到msdb,直接排程執行會失敗的,因為沒有儲存密碼,若有需要連結資料庫就會失敗喔,除非你有特別再指定連線密碼字串

看到這會覺得DontSaveSensitive很廢,其實也沒,這得搭配"封裝組態"使用,將連線字串等機密資訊儲存在"封裝組態"裡,它可以選擇存成XML啦,編輯那XML,比如說換Server名稱,就很容易將封裝佈署到不同的Server上囉,但缺點就是安全性,因為XML是明碼文字檔,裡面有帳密資訊的話,若誰得到那文字檔,就知道帳密啦,所以存放XML的資料夾可要特別設定權限啊,或是想辦法加密吧,不過目前好像不支援,得自己想辦法,要不然就是不要存成XML

0 意見:

張貼留言