使用 Azure Key Vault 設定 SQL Server TDE 可延伸金鑰管理

適用於:SQL Server

在本文中,您將安裝及設定適用於 Azure Key Vault 的 SQL Server 連接器。

注意

Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。

從 SQL Server 2022 (16.x) Cumulative Update 12 開始,使用 Azure Key Vault (AKV) 的可延伸金鑰管理可用於 Linux 上的 SQL Server 環境。 請遵循相同的指示,但略過步驟 3 和 4。

必要條件

在開始搭配 SQL Server 執行個體使用 Azure Key Vault 前,請確認已符合下列必要條件:

步驟 1:設定 Microsoft Entra 服務主體

若要將 SQL Server 執行個體存取權限授與 Azure Key Vault,您需要 Microsoft Entra ID 中的服務主體帳戶。

  1. 登入 Azure 入口網站並執行下列任一步驟:

    • 選取 [Microsoft Entra ID] 按鈕。

      [Azure 服務] 窗格的螢幕擷取畫面。

    • 選取 [更多服務],然後在 [所有服務] 窗格中鍵入 [Microsoft Entra ID]

  2. 透過執行以下操作,使用 Microsoft Entra ID 註冊應用程式。 如需詳細的逐步指示,請參閱 Azure Key Vault 部落格文章 Azure Key Vault – 逐步解說取得應用程式的身分識別一節。

    1. 在 [Microsoft Entra ID] 資源的 [管理] 部分中,選取 [應用程式註冊]

      Azure 入口網站中 Microsoft Entra ID [概觀] 頁面的螢幕擷取畫面。

    2. 應用程式註冊頁面上,選取新增註冊

      Azure 入口網站中 [應用程式註冊]的螢幕擷取畫面。

    3. 在 [註冊應用程式] 窗格中,輸入應用程式的使用者對應名稱,然後選取 [註冊]。

      [註冊應用程式] 窗格的螢幕擷取畫面。

    4. 在左側窗格中,選取 [憑證和祕密] > [用戶端密碼] > [新增用戶端密碼]

      Azure 入口網站中應用程式之 [憑證和祕密] 窗格的螢幕擷取畫面。

    5. 在 [新增用戶端密碼] 中輸入描述和適當的到期日,然後選取 [新增]。 您無法選擇超過 24 個月的到期期間。 如需詳細資訊,請參閱新增用戶端密碼

      Azure 入口網站中應用程式之 [新增用戶端密碼] 部分的螢幕擷取畫面。

    6. 在 [憑證和祕密] 窗格的 [值] 下方,選取用戶端密碼值旁的 [複製] 按鈕,以便在 SQL Server 中用於建立非對稱金鑰。

      Azure 入口網站中祕密值的螢幕擷取畫面。

    7. 在左窗格中選取 [概觀],然後在 [應用程式 (用戶端) 識別碼] 方塊中,複製要用來在 SQL Server 中建立非對稱金鑰的值。

      [概觀] 窗格上 [應用程式 (用戶端) 識別碼] 值的螢幕擷取畫面。

步驟 2:建立金鑰保存庫

選取要用來建立金鑰保存庫的方法。

使用 Azure 入口網站來建立金鑰保存庫

您可使用 Azure 入口網站來建立金鑰保存庫,並在其中新增 Microsoft Entra 主體。

  1. 建立資源群組。

    您透過 Azure 入口網站所建立所有 Azure 資源都必須包含在可建立用來存放金鑰保存庫的資源群組中。 此範例中的資源名稱為 DocsSampleRG。 請自行選擇資源群組和金鑰保存庫名稱,因為所有金鑰保存庫名稱都是全域唯一的。

    在 [建立資源群組] 窗格的 [專案詳細資料] 下方輸入值,然後選取 [檢閱 + 建立]。

    Azure 入口網站中 [建立資源群組] 窗格的螢幕擷取畫面。

  2. 在 Azure 入口網站中,搜尋或選取金鑰保存庫服務以建立金鑰保存庫。 選取 建立

    在 [建立金鑰保存庫] 窗格中,選取 [基本] 索引標籤,輸入索引標籤的適當值。建議也啟用清除保護。

    Azure 入口網站中 [建立金鑰保存庫] 窗格的螢幕擷取畫面。

  3. 在 [存取組態] 索引標籤上,可以選取 [Azure 角色型存取控制] 或 [保存庫存取原則]。 我們會討論這兩個選項,但建議使用 [Azure 角色型存取控制] 選項。 如需詳細資訊,請參閱存取模型概觀

    Azure 入口網站中 [建立金鑰保存庫] 窗格和 [存取設定] 索引標籤的螢幕擷取畫面。

  4. 選取 [檢閱 + 建立] 按鈕並建立金鑰保存庫。

Azure 角色型存取控制

建議使用 Azure 角色型存取控制 (RBAC) 將權限指派給金鑰保存庫。 此方法可讓您在更細微的層級將權限指派給使用者、群組和應用程式。 可以在管理平面 (Azure 角色指派) 和資料平面 (金鑰保存庫存取原則) 將權限指派給金鑰保存庫。 如果只能使用存取原則,則可以略過本節並移至保存庫存取原則一節。 如需 Azure Key Vault RBAC 權限的詳細資訊,請參閱 Key Vault 資料平面操作的 Azure 內建角色

  1. 移至您所建立的金鑰保存庫資源,然後選取 [存取控制] (IAM) 設定。

  2. 選取 [新增>][新增角色指派]。

    Azure 入口網站 [存取控制 (IAM)] 窗格上 [新增角色指派] 按鈕的螢幕擷取畫面。

  3. EKM 應用程式需要 [金鑰保存庫密碼編譯服務加密使用者] 角色,才能執行包裝和解除包裝操作。 搜尋 [金鑰保存庫密碼編譯服務加密使用者]並選取角色。 選取 [下一步]。

    Azure 入口網站中 [選取角色指派] 的螢幕擷取畫面。

  4. 在 [成員] 索引標籤中,選取 [選取成員] 選項,然後搜尋您在步驟 1 中建立的 Microsoft Entra 應用程式。 選取應用程式,然後選擇 [選取] 按鈕。

    Azure 入口網站中用於新增角色指派的 [選取角色] 窗格的螢幕擷取畫面。

  5. 選取兩次 [檢閱 + 指派],以完成角色指派。

  6. 建立金鑰的使用者需要 [金鑰保存庫管理員] 角色。 搜尋 [金鑰保存庫管理員],然後選取角色。 選取 [下一步]。

  7. 就像先前的步驟一樣,新增可建立金鑰的成員並指派角色。

保存庫存取原則

注意

如果使用 [Azure 角色型存取控制] 選項,則可以略過本節。 如果要變更權限模型,可以移至金鑰保存庫的 [存取設定] 功能表。 確保您擁有管理金鑰保存庫的正確權限。 如需詳細資訊,請參閱在金鑰保存庫中啟用 Azure RBAC 權限

  1. 從 [存取組態] 索引標籤中,選取 [保存庫存取原則]。 如果使用現有的金鑰保存庫,可以從金鑰保存庫資源中選取 [存取原則] 功能表,然後選取 [建立]。

  2. 在 [建立存取原則] 窗格中,從 [金鑰管理操作] 選項中選取 [取得] 和 [列出] 權限。 從 [密碼編譯操作] 選項中選取 [解除包裝金鑰] 和 [包裝金鑰] 權限。 選取下一個

    [存取原則] 窗格上 [新增存取原則] 連結的螢幕擷取畫面。

  3. 在 [主體] 索引標籤中,選取在步驟 1 中建立的應用程式。

    [主體] 窗格上應用程式搜尋方塊的螢幕擷取畫面。

  4. 選取 [下一步],然後選取 [建立]

建立金鑰

  1. 在 [金鑰保存庫] 窗格中,選取 [金鑰],然後選取 [產生/匯入] 選項。 這會開啟 [建立金鑰] 窗格。 輸入金鑰保存庫名稱。 選取 [產生] 選項,然後輸入金鑰名稱。 SQL Server 連接器需要金鑰名稱僅使用字元 "a-z"、"A-Z"、"0-9" 和 "-",且長度限制為 26 個字元。

  2. 使用金鑰類型 RSARSA 金鑰大小2048。 EKM 目前僅支援 RSA 金鑰。 根據需要設定啟用日期和到期日,並將 [啟用] 設為 [是]。

    [建立金鑰] 窗格的螢幕擷取畫面。

最佳作法

若要確保快速修復金鑰,且能夠在 Azure 之外存取資料,建議採用下列最佳做法︰

  • 在本機硬體安全模組 (HSM) 裝置上建立加密金鑰。 請務必使用非對稱的 RSA 2048 或 3072 金鑰,以便獲得 SQL Server 支援。

  • 將加密金鑰匯入至 Azure 金鑰保存庫。 下一節將描述這個程序。

  • 在第一次使用 Azure 金鑰保存庫金鑰之前,請先利用 Backup-AzureKeyVaultKey PowerShell Cmdlet 備份 Azure 金鑰保存庫金鑰。

  • 每當對金鑰進行任何變更時 (例如新增 ACL、新增標籤、新增金鑰屬性),請務必先另行備份 Azure Key Vault 金鑰。

    注意

    備份金鑰是 Azure Key Vault 金鑰作業,它會傳回可儲存在任何位置的檔案。

    在防火牆或 Proxy 伺服器後方使用適用於 Microsoft Azure Key Vault 的 SQL Server 連接器時,如果流量延遲或遭封鎖,可能會影響效能。 熟悉在防火牆後存取 Azure Key Vault,以便確保正確規則已就緒。

步驟 3:安裝 SQL Server 連接器

Microsoft 下載中心下載 SQL Server 連接器。 下載應該由 SQL Server 電腦的系統管理員來完成。

注意

  • SQL Server 連接器 1.0.0.440 版和更舊版本已被取代,在生產環境中已不再受到支援,並且使用 [SQL Server 連接器維護和疑難排解] 頁面中 [SQL Server 連接器升級] 下的指示。
  • 從 1.0.3.0 版開始,SQL Server 連接器會相關的錯誤訊息報告至 Windows 事件記錄,以供疑難排解之用。
  • 從 1.0.4.0 版開始已支援私人 Azure 雲端,包括世紀互聯營運的 Azure、Azure 德國和 Azure Government。
  • 1.0.5.0 版中的憑證指紋演算法有重大變更。 您在升級至 1.0.5.0 之後可能會遇到資料庫還原失敗。 如需詳細資訊,請參閱知識庫文章 447099
  • 從 1.0.5.0 版開始 (時間戳記:2020 年 9 月),SQL Server 連接器支援篩選訊息和網路要求重試邏輯。
  • 從更新的 1.0.5.0 版開始 (時間戳記:2020 年 11 月),SQL Server 連接器支援 RSA 2048、RSA 3072、RSA-HSM 2048 及 RSA-HSM 3072 金鑰。
  • 從更新的 1.0.5.0 版開始 (時間戳記:2020 年 11 月),可以參考 Azure Key Vault 中的特定金鑰版本。

[SQL Server 連接器安裝精靈] 的螢幕擷取畫面。

按照預設,連接器會安裝在 C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault。 這個位置可以在安裝期間變更。 如果將其變更,請調整下一節中的指令碼。

連接器沒有介面,但如果安裝成功,即會在電腦上安裝 Microsoft.AzureKeyVaultService.EKM.dll。 此組件是密碼編譯的 EKM 提供者 DLL,需要使用 CREATE CRYPTOGRAPHIC PROVIDER 陳述式向 SQL Server 註冊。

SQL Server 連接器安裝也可讓您選擇性地下載 SQL Server 加密的範例指令碼。

若要檢視 SQL Server Connector 的錯誤碼說明、組態設定或維護工作,請參閱:

步驟 4:新增登錄機碼以支援 EKM 提供者

警告

修改登錄應由確切知道其執行作業的使用者執行。 如果您未正確修改登錄,可能會發生嚴重問題。 為增加保護起見,請先備份登錄,再進行修改。 如果發生問題,您可以還原登錄。

  1. 請確定 SQL Server 已安裝且正在執行。

  2. 執行 regedit 以開啟登錄編輯程式。

  3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 上建立 SQL Server Cryptographic Provider 登錄機碼。 完整路徑為 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider

  4. 以滑鼠右鍵按一下 SQL Server Cryptographic Provider 登錄機碼,然後選取 [權限]

  5. 向執行 SQL Server 服務的使用者帳戶提供 SQL Server Cryptographic Provider 登錄機碼的 [完全控制] 權限。

    登錄編輯程式中 EKM 登錄機碼的螢幕擷取畫面。

  6. 選取 [套用],然後選取 [確定]

  7. 關閉登錄編輯程式,然後重新啟動 SQL Server 服務。

    注意

    如果您在容錯移轉叢集實例使用 TDE 與 EKM 或 Azure Key Vault,您必須完成額外步驟,才能將 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider 新增至「叢集登錄檢查點」常式,讓登錄可跨節點同步。 同步處理可協助在容錯移轉及金鑰輪替之後進行資料庫復原。

    若要將登錄機碼新增至「叢集登錄檢查點」常式,請在 PowerShell 執行下列命令:

    Add-ClusterCheckpoint -RegistryCheckpoint "SOFTWARE\Microsoft\SQL Server Cryptographic Provider" -Resourcename "SQL Server"

步驟 5:設定 SQL Server

如需本節中每個動作所需最小權限等級的附註。請參閱 B. 常見問題集

設定 master 資料庫

  1. 執行 sqlcmd 或開啟 SQL Server Management Studio。

  2. 執行下列 Transact-SQL 指令碼,將 SQL Server 設定為使用 EKM:

    -- Enable advanced options.
    USE master;
    GO
    
    EXEC sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    
    -- Enable EKM provider
    EXEC sp_configure 'EKM provider enabled', 1;
    GO
    RECONFIGURE;
    
  3. 向 SQL Server 註冊 SQL Server 連接器作為 EKM 提供者。

    使用 SQL Server 連接器來建立密碼編譯提供者,它是 Azure Key Vault 的 EKM 提供者。 在此範例中,提供者名稱為 AzureKeyVault_EKM

    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    

    注意

    檔案路徑長度不能超過 256 個字元。

  4. 設定 SQL Server 登入的 SQL Server 登入認證,以便使用金鑰保存庫。

    必須將認證新增至每個將使用金鑰保存庫中金鑰來執行加密的登入。 這可能包括:

    • 使用金鑰保存庫以設定和管理 SQL Server 加密案例的 SQL Server 系統管理員登入。

    • 可能會啟用 TDE 或其他 SQL Server 加密功能的其他 SQL Server 登入。

    認證與登入之間的一對一對應。 也就是說,每個登入都必須具有唯一的認證。

    利用下列方式修改此 Transact-SQL 指令碼:

    • 編輯 IDENTITY 引數 (DocsSampleEKMKeyVault),以指向您的 Azure 金鑰保存庫。

      • 如果使用的是全域 Azure,請使用 Azure Key Vault 名稱來取代 IDENTITY 引數 (步驟 2:建立金鑰保存庫)。
      • 如果使用的是私人 Azure 雲端 (例如 Azure Government、世紀互聯營運的 Microsoft Azure 或 Azure 德國),請將 IDENTITY 引數取代為使用 PowerShell 建立金鑰保存庫和金鑰一節的步驟 3 中所傳回保存庫 URI。 請不要在金鑰保存庫 URI 中包含 https://
    • SECRET 引數的第一部分取代為步驟 1:設定 Microsoft Entra 服務主體中的 Microsoft Entra 用戶端識別碼。 在此範例中,用戶端識別碼d956f6b9xxxxxxx

      重要

      請務必移除應用程式 (用戶端) 識別碼中的連字號。

    • 使用用戶端密碼完成 SECRET 引數的第二個部分 (步驟 1:設定 Microsoft Entra 服務主體)。 在此範例中,用戶端密碼為 yrA8X~PldtMCvUZPxxxxxxxxSECRET 引數的最終字串將是一長串字母和數字,不含連字號 (用戶端密碼部分除外,以防用戶端密碼包含任何連字號)。

      USE master;
      CREATE CREDENTIAL sysadmin_ekm_cred
          WITH IDENTITY = 'DocsSampleEKMKeyVault',                            -- for public Azure
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.azure.cn',          -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.microsoftazure.de', -- for Azure Germany
                 --<----Application (Client) ID ---><--Microsoft Entra app (Client) ID secret-->
          SECRET = 'd956f6b9xxxxxxxyrA8X~PldtMCvUZPxxxxxxxx'
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
      
      -- Add the credential to the SQL Server administrator's domain login
      ALTER LOGIN [<domain>\<login>]
      ADD CREDENTIAL sysadmin_ekm_cred;
      

    如需針對 CREATE CREDENTIAL 引數使用變數及以程式設計方式從用戶端識別碼移除連字號的範例,請參閱 CREATE CREDENTIAL (Transact-SQL)

  5. 在 SQL Server 執行個體中開啟 Azure Key Vault 金鑰。

    無論建立了新的金鑰,或匯入了如步驟 2:建立金鑰保存庫中所述的非對稱金鑰,都需要開啟金鑰。 請在下列 Transact-SQL 指令碼提供金鑰名稱來開啟金鑰。

    重要

    請務必先完成此步驟的登錄必要條件。

    • 請將 EKMSampleASYKey 取代為您想在 SQL Server 使用的金鑰名稱。
    • ContosoRSAKey0 取代為 Azure Key Vault 中金鑰的名稱。 以下是無版本金鑰的範例。
    CREATE ASYMMETRIC KEY EKMSampleASYKey
    FROM PROVIDER [AzureKeyVault_EKM]
    WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    從更新的 SQL Server 連接器 1.0.5.0 版開始,您可以參考 Azure Key Vault 的特定金鑰版本:

    CREATE ASYMMETRIC KEY EKMSampleASYKey
    FROM PROVIDER [AzureKeyVault_EKM]
    WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    在上述範例指令碼中,1a4d3b9b393c4678831ccc60def75379 代表將使用的金鑰特定版本。 若您使用此指令碼,則是否使用新版本更新金鑰並不重要。 例如,在資料庫作業中會一律採用金鑰版本 1a4d3b9b393c4678831ccc60def75379

  6. 請利用上個步驟所建立的 SQL Server 非對稱金鑰來建立新登入。

    --Create a Login that will associate the asymmetric key to this login
    CREATE LOGIN TDE_Login
    FROM ASYMMETRIC KEY EKMSampleASYKey;
    
  7. 從 SQL Server 中的非對稱金鑰來建立新登入。 卸除步驟 5:設定 SQL Server 的認證資訊對應,以便認證可對應至新登入。

    --Now drop the credential mapping from the original association
    ALTER LOGIN [<domain>\<login>]
    DROP CREDENTIAL sysadmin_ekm_cred;
    
  8. 改變新的登入,並將 EKM 認證對應至新的登入。

    --Now add the credential mapping to the new Login
    ALTER LOGIN TDE_Login
    ADD CREDENTIAL sysadmin_ekm_cred;
    

設定要加密的使用者資料庫

  1. 建立將使用 Azure Key Vault 金鑰來進行加密的測試資料庫。

    --Create a test database that will be encrypted with the Azure Key Vault key
    CREATE DATABASE TestTDE;
    
  2. 利用 ASYMMETRIC KEY (EKMSampleASYKey) 來建立資料庫加密金鑰。

    USE <DB Name>;
    --Create an ENCRYPTION KEY using the ASYMMETRIC KEY (EKMSampleASYKey)
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;
    
  3. 加密測試資料庫。 設定 ENCRYPTION ON 以便啟用 TDE。

    --Enable TDE by setting ENCRYPTION ON
    ALTER DATABASE TestTDE
    SET ENCRYPTION ON;
    

登錄詳細資料

  1. master 資料庫中執行下列 Transact-SQL 查詢,以顯示使用的非對稱金鑰。

    SELECT name, algorithm_desc, thumbprint FROM sys.asymmetric_keys;
    

    此陳述式會傳回:

    name            algorithm_desc    thumbprint
    EKMSampleASYKey RSA_2048          <key thumbprint>
    
  2. 在使用者資料庫 (TestTDE) 中,執行下列 Transact-SQL 查詢,以顯示使用的非對稱金鑰。

    SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint 
    FROM sys.dm_database_encryption_keys
    WHERE database_id = DB_ID('TestTDE');
    

    此陳述式會傳回:

    encryptor_type encryption_state_desc encryptor_thumbprint
    ASYMMETRIC KEY ENCRYPTED             <key thumbprint>
    

清理

  1. 清除測試物件。 刪除在此測試指令碼中建立的所有物件。

    -- CLEAN UP
    USE master;
    GO
    ALTER DATABASE [TestTDE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [TestTDE];
    GO
    
    ALTER LOGIN [TDE_Login] DROP CREDENTIAL [sysadmin_ekm_cred];
    DROP LOGIN [TDE_Login];
    GO
    
    DROP CREDENTIAL [sysadmin_ekm_cred];
    GO
    
    USE master;
    GO
    DROP ASYMMETRIC KEY [EKMSampleASYKey];
    DROP CRYPTOGRAPHIC PROVIDER [AzureKeyVault_EKM];
    GO
    

    如需範例指令碼,請參閱 SQL Server 透明資料加密和使用 Azure Key Vault 進行可延伸金鑰管理部落格文章 (英文)。

  2. 刪除某個金鑰或所有 EKM 金鑰後,不會自動清理 SQL Server Cryptographic Provider 登錄機碼。 必須手動清理。 清理登錄機碼時應非常小心,因為過早清理登錄可能會破壞 EKM 功能。 若要清理登錄機碼,請刪除 SQL Server Cryptographic Provider 上的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 登錄機碼。

疑難排解

如果未建立登錄機碼 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider 或未授與必要的權限,下列 DDL 陳述式會失敗:

CREATE ASYMMETRIC KEY EKMSampleASYKey
FROM PROVIDER [AzureKeyVault_EKM]
WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
CREATION_DISPOSITION = OPEN_EXISTING;
Msg 33049, Level 16, State 2, Line 65
Key with name 'ContosoRSAKey0' does not exist in the provider or access is denied. Provider error code: 2058.  (Provider Error - No explanation is available, consult EKM Provider for details)

即將到期的用戶端密碼

如果認證中包含即將到期的用戶端密碼,可將新密碼指派至登入資訊。

  1. 更新在步驟 1:設定 Microsoft Entra 服務主體中所建立的原始密碼。

  2. 利用相同的身分識別來變更認證,並利用下列程式碼來變更新密碼。 將 <New Secret> 取代為您的新秘密:

    ALTER CREDENTIAL sysadmin_ekm_cred
    WITH IDENTITY = 'DocsSampleEKMKeyVault',
    SECRET = '<New Secret>';
    
  3. 重新啟動 SQL Server 服務。

注意

如果您在可用性群組 (AG) 使用 EKM,您必須改變認證,並在 AG 的所有節點重新啟動 SQL Server 服務。

以新的 AKV 金鑰或新的 AKV 金鑰版本輪替非對稱密鑰

注意

  • 手動輪替 AKV 金鑰時,SQL Server 同時支援 AKV 無版本金鑰或有版本金鑰,而且不需要使用不同的 AKV 金鑰。
  • 可以輪替原始 AKV 金鑰,從而建立新版本,以取代在 SQL Server 中建立的先前的金鑰。
  • 若要進行手動金鑰輪替,必須建立新的 SQL Server 非對稱金鑰,以參考在 AKV 中輪替的無版本金鑰或有版本金鑰。 針對新的 SQL Server 非對稱金鑰,系統會使用 AKV 中的最高金鑰版本來自動選擇無版本 AKV 金鑰。 針對有版本的金鑰,必須使用語法 WITH PROVIDER_KEY_NAME = <key_name>/<version> 指出 AKV 中的最高版本。 可改變資料庫加密金鑰,以使用新的非對稱金鑰重新加密。 相同的金鑰名稱 (有版本或無版本) 可以搭配 AKV 輪替原則使用。 針對有版本金鑰,必須新增目前的版本。 針對無版本金鑰,請使用相同的金鑰名稱。

SQL Server 沒有機制可自動輪替用於 TDE 的非對稱金鑰。 手動輪換非對稱密鑰的步驟如下。

  1. 在初始設定中所使用的認證 (sysadmin_ekm_cred) 也可供金鑰輪替重複使用。 或者,為新的非對稱金鑰建立新的認證。

    CREATE CREDENTIAL <new_credential_name>
        WITH IDENTITY = <key vault>,
        SECRET = 'existing/new secret'
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
    
  2. 將認證新增至主體:

    ALTER LOGIN [domain\userName];
    ADD CREDENTIAL <new_credential_name>;
    
  3. 根據新金鑰來建立新的非對稱金鑰 (輪替金鑰之後)。 新金鑰可以是無版本金鑰 (範例中的 ContosoRSAKey0) 或有版本金鑰 (ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379,其中 1a4d3b9b393c4678831ccc60def75379 是 AKV 中已更新金鑰的版本):

    CREATE ASYMMETRIC KEY <new_ekm_key_name>
     FROM PROVIDER [AzureKeyVault_EKM]  
     WITH PROVIDER_KEY_NAME = <new_key_from_key_vault>,  
     CREATION_DISPOSITION = OPEN_EXISTING;
    
  4. 從新的非對稱金鑰來建立新登入:

    CREATE LOGIN <new_login_name>
    FROM ASYMMETRIC KEY <new_ekm_key_name>;
    
  5. 從主體中卸除認證:

    ALTER LOGIN [domain\username]
    DROP CREDENTIAL <new_credential_name>;
    
  6. 將 AKV 認證對應至新登入:

    ALTER LOGIN <new_login_name>;
    ADD CREDENTIAL <new_credential_name>;
    
  7. 改變資料庫加密金鑰 (DEK),以使用新的非對稱金鑰重新加密:

    USE [databaseName];
    GO
    ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
    
  8. 可以驗證資料庫中使用的新的非對稱金鑰和加密金鑰:

    SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint 
    FROM sys.dm_database_encryption_keys 
    WHERE database_id = DB_ID('databaseName');
    

    此指紋應該符合路徑 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider\Azure Key Vault\<key_vault_url>\<thumbprint> 底下的登錄機碼,並為您的輪替金鑰提供 KeyUri

重要

輪換伺服器的邏輯 TDE 保護裝置,即表示切換至可保護資料庫加密金鑰 (DEK) 的新非對稱式金鑰或憑證。 金鑰輪換是一項線上作業,應可在幾秒內完成,因為此作業只會解密和重新 DEK,而不是整個資料庫。

輪換後,請不要刪除先前版本的金鑰。 輪換金鑰後,有些資料仍會使用之前的金鑰加密,例如較舊的資料庫備份、已備份的記錄檔、虛擬記錄檔 (VLF) 和交易記錄檔。 資料庫恢復或資料庫還原可能需要先前的金鑰。