封裝中的敏感性資料存取控制

適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime

若要保護 Integration Services 套件中的資料,您可以設定保護層級,只保護套件中的敏感性資料或保護全部資料。 此外,您可以使用密碼或使用者金鑰將資料加密,或是藉由資料庫來加密資料。 也請注意,用於封裝的保護等級不一定是靜態的,而是隨著封裝生命週期有所改變。 通常,您會在開發階段設定一個保護等級,然後在部署封裝時設定另一個保護等級。

注意

除了本主題所描述的保護層級之外,您也可以使用固定的資料庫層級角色來保護儲存到 Integration Services 伺服器的套件。

機密資訊的定義

在 Integration Services 套件中,下列資訊定義為「敏感性」資訊:

  • 連接字串的密碼部份。 不過,如果您選取加密所有項目的選項,則會將整個連接字串視為機密資料。

  • 標記為機密資料之工作產生的 XML 節點。 XML 節點的標記由 Integration Services 控制,使用者無法變更。

  • 標記為機密資訊的任何變數。 變數的標記由 Integration Services 控制。

對於 Integration Services 是否將屬性視為敏感性,取決於 Integration Services 元件 (例如連線管理員或工作) 的開發人員是否將該屬性指定為敏感性。 使用者無法將屬性加入到視為機密之屬性的清單中,也無法從中移除屬性。

加密

套件保護層級所使用的加密是使用 Microsoft 資料保護 API (DPAPI)(其為加密 API (CryptoAPI) 的一部分) 來執行的。

使用密碼加密封裝的封裝保護等級也需要您提供密碼。 如果您將保護等級從不使用密碼變更為使用密碼的等級,則會提示您輸入密碼。

此外,對於使用密碼的保護層級,Integration Services 會使用 .NET Framework 類別庫 (FCL) 中,金鑰長度為 192 位元的「三重 DES」加密演算法。

保護等級

下表描述 Integration Services 提供的保護層級。 括弧中的值是 DTSProtectionLevel 列舉的值。 這些值會顯示在 [屬性] 視窗中,當您在 SQL Server Data Tools (SSDT) 中處理套件時,可以使用該視窗來設定套件的屬性。

保護等級 描述
不要儲存機密 (DontSaveSensitive) 儲存封裝時,隱藏封裝中的機密屬性值。 此保護等級不加密,但是會防止標記為機密資料的屬性與封裝一起儲存,因此其他使用者無法使用機密資料。 如果其他使用者開啟封裝,則機密資訊會以空白取代,該使用者必須提供機密資訊。

dtutil 公用程式 (dtutil.exe) 搭配使用時,這個保護等級會對應至值 0。
以密碼加密全部 (EncryptAllWithPassword) 使用密碼加密整個封裝。 封裝是使用建立或匯出封裝時使用者提供的密碼來加密的。 若要在 SSIS Designer 中開啟套件,或使用 dtexec 命令提示公用程式來執行套件,使用者必須提供套件密碼。 如果沒有密碼,使用者就無法存取或執行封裝。

dtutil 公用程式搭配使用時,這個保護等級會對應至值 3。
以使用者金鑰加密全部 (EncryptAllWithUserKey) 使用以目前使用者設定檔為基礎的金鑰加密整個封裝。 只有建立或匯出套件的使用者,才能在 SSIS Designer 中開啟套件,或使用 dtexec 命令提示公用程式來執行套件。

dtutil 公用程式搭配使用時,這個保護等級會對應至值 4。

注意:對於使用使用者金鑰的保護層級,Integration Services 會使用 DPAPI 標準。 如需 DPAPI 的詳細資訊,請參閱 MSDN Library,網址為 https://msdn.microsoft.com/library
以密碼加密機密 (EncryptSensitiveWithPassword) 使用密碼僅加密封裝中的機密屬性值。 DPAPI 用於此加密。 機密資料會做為封裝的一部份進行儲存,但該資料會使用建立或匯出封裝時目前使用者所提供的密碼進行加密。 若要在 SSIS Designer 中開啟套件,使用者必須提供套件密碼。 如果未提供密碼,則會開啟封裝但不提供機密資料,目前的使用者必須為機密資料提供新值。 如果使用者嘗試在未提供密碼的情況下執行封裝,則封裝執行會失敗。 如需密碼和命令列執行的詳細資訊,請參閱 dtexec 公用程式

dtutil 公用程式搭配使用時,這個保護等級會對應至值 2。
以使用者金鑰加密機密 (EncryptSensitiveWithUserKey) 使用以目前使用者設定檔為基礎的金鑰,僅加密封裝中的機密屬性值。 只有使用相同設定檔的相同使用者才可以載入封裝。 如果其他使用者開啟封裝,則機密資訊會以空白取代,且目前的使用者必須為機密資料提供新值。 如果使用者嘗試執行封裝,則封裝執行會失敗。 DPAPI 用於此加密。

dtutil 公用程式搭配使用時,這個保護等級會對應至值 1。

注意:對於使用使用者金鑰的保護層級,Integration Services 會使用 DPAPI 標準。 如需 DPAPI 的詳細資訊,請參閱 MSDN Library,網址為 https://msdn.microsoft.com/library
依賴伺服器儲存體進行加密 (ServerStorage) 使用 SQL Server 資料庫角色保護整個套件。 在將套件儲存到 SQL Server msdb 資料庫時,才支援此選項。 此外,SSISDB 目錄會使用 ServerStorage 保護等級

將套件從 SQL Server Data Tools (SSDT) 儲存到檔案系統時,不支援此選項。

保護等級設定和 SSISDB 目錄

SSISDB 目錄會使用 ServerStorage 保護等級。 當您將 Integration Services 專案部署至 Integration Services 伺服器時,目錄會自動將套件資料與敏感值加密。 當您擷取時,目錄也會自動解密資料。

如果您從 Integration Services 伺服器將專案 (.ispac 檔) 匯出至檔案系統,系統會自動將保護層級變更為 EncryptSensitiveWithUserKey。 如果您使用 SQL Server Data Tools (SSDT) 中的 [Integration Services 匯入專案精靈] 匯入專案,則 [屬性] 視窗中的 [ProtectionLevel] 屬性會顯示 [EncryptSensitiveWithUserKey] 這個值。

根據封裝生命週期設定保護等級

當您第一次在 SQL Server Data Tools (SSDT) 中開發 SQL Server Integration Services 套件時,可以設定該套件的保護層級。 之後,在 SQL Server Management Studio 中從 Integration Services 部署、匯入或匯出套件時,或從 SQL Server Data Tools (SSDT) 將套件複製到 SQL Server、SSIS 套件存放區或檔案系統時,都可以更新套件保護層級。 例如,如果您在電腦上建立和儲存封裝時,使用其中一個使用者金鑰保護等級選項,則當您將封裝提供給其他使用者時,必須變更保護等級,否則使用者無法開啟封裝。

一般而言,您需要依照下列步驟變更保護等級:

  1. 在開發階段,將封裝的保護等級設定保留為預設值 EncryptSensitiveWithUserKey。 這項設定可以協助確保只有開發人員能夠看到封裝中的機密值。 或者,您可以考慮使用 EncryptAllWithUserKeyDontSaveSensitive

  2. 到了部署封裝的階段,您必須將保護等級變更為不需要開發人員使用者金鑰的等級。 因此您通常需要選取 EncryptSensitiveWithPasswordEncryptAllWithPassword。 指定暫時性的增強式密碼來加密封裝,並且讓生產環境中的作業小組知道該密碼。

  3. 將封裝部署到生產環境之後,作業小組可以指定只有小組內部知道的增強式密碼來重新加密已部署的封裝。 或者,作業小組也可以選擇 EncryptSensitiveWithUserKeyEncryptAllWithUserKey,然後使用將執行封裝之帳戶的本機認證來加密已部署的封裝。

設定或變更封裝的保護等級

若要控制封裝內容以及其中包含之機密值 (例如密碼) 的存取權,請設定 ProtectionLevel 屬性的值。 包含在專案中的封裝需要有和專案相同的保護層級,才能建立專案。 如果您變更專案上的 ProtectionLevel 屬性設定,就需要手動更新封裝的屬性設定。

如需 Integration Services 安全性功能的概觀,請參閱安全性概觀 (Integration Services)

本主題中的程序描述如何使用 SQL Server Data Tools (SSDT) 或 dtutil 命令提示字元公用程式來變更 ProtectionLevel 屬性。

注意

除了本主題中的程序之外,您通常可以在匯入或匯出封裝時,設定或變更封裝的 ProtectionLevel 屬性。 您也可以在使用 [SQL Server 匯入和匯出精靈] 來儲存套件時,變更套件的 ProtectionLevel 屬性。

若要在 SQL Server 資料工具中設定或變更封裝的保護等級

  1. 保護等級一節中,檢閱 ProtectionLevel 屬性可用的值,並判斷適用於您套件的值。

  2. 在 SQL Server Data Tools (SSDT) 中,開啟包含套件的 Integration Services 專案。

  3. 在 SSIS Designer 中開啟套件。

  4. 如果 [屬性] 視窗並未顯示封裝屬性,請按一下設計介面。

  5. 在 [屬性] 視窗的 [安全性] 群組中,為 ProtectionLevel 屬性選取適當的值。

    如果您選取了需要密碼的保護等級,請輸入密碼作為 PackagePassword 屬性的值。

  6. 在 [檔案] 功能表上,選取 [儲存選取項目] 以儲存修改過的封裝。

在命令提示字元設定或變更封裝的保護等級

  1. 保護等級一節中,檢閱 ProtectionLevel 屬性可用的值,並判斷適用於您套件的值。

  2. dtutil 公用程式 主題中,檢閱 Encrypt選項的對應,並判斷適合當做所選 ProtectionLevel 屬性值的整數。

  3. 開啟命令提示字元視窗。

  4. 在命令提示字元,導覽至您要設定其 ProtectionLevel 屬性之封裝的所在資料夾。

    下列步驟所示的語法範例假設此資料夾為目前的資料夾。

  5. 使用類似於下列其中一個範例的命令,設定或變更封裝的保護等級:

    • 下列命令會將檔案系統中個別封裝的 ProtectionLevel 屬性設為層級 2「機密資料以密碼加密」,並且將密碼設為 "strongpassword":

      dtutil.exe /file "C:\Package.dtsx" /encrypt file;"C:\Package.dtsx";2;strongpassword

    • 下列命令會將檔案系統中特定資料夾內所有封裝的 ProtectionLevel 屬性設為層級 2「機密資料以密碼加密」,並且將密碼設為 "strongpassword":

      for %f in (*.dtsx) do dtutil.exe /file %f /encrypt file;%f;2;strongpassword

      如果您要對批次檔使用類似命令,請將檔案預留位置 "%f" 改輸入為批次檔適用的 "%%f"。

套件/專案保護等級對話方塊

使用 [封裝保護等級] 對話方塊,即可更新封裝的保護等級。 保護等級會決定保護方法、密碼或使用者金鑰,以及封裝保護的範圍。 保護可包括所有資料或只包括機密資料。

若要了解套件安全性的需求和選項,請參閱安全性概觀 (Integration Services)

選項。

套件保護層級
從清單中選取保護等級。

密碼
如果使用 [機密資料以密碼加密] 或 [所有資料以密碼加密] 保護層級,請輸入密碼。

再次輸入密碼
再輸入密碼一次。

套件密碼對話方塊

使用 [封裝密碼] 對話方塊,即可為使用密碼加密的封裝提供封裝密碼。 如果封裝使用 [機密資料以密碼加密][所有資料以密碼加密] 保護等級,則必須提供密碼。

選項。

密碼
輸入密碼。

另請參閱

Integration Services (SSIS) 封裝
安全性概觀 (Integration Services)
dtutil 公用程式