共用方式為


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

若要保護 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 伺服器時,目錄會自動將套件資料與敏感值加密。 當您擷取時,目錄也會自動解密資料。

如果您將專案 (.ispac 檔案從 Integration Services 伺服器匯出至檔案系統) ,系統會自動將保護層級變更為 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,然後使用將執行封裝之帳戶的本機認證來加密已部署的封裝。

另請參閱

匯入和匯出封裝 (SSIS 服務)
Integration Services (SSIS) 封裝
安全性概觀 (Integration Services)