在 SQL Server 上使用 Azure Key Vault 輪替 TDE 的非對稱金鑰

適用於:SQL Server

本文說明如何手動旋轉透明資料加密(TDE)搭配可擴展金鑰管理(EKM)及Azure Key Vault所使用的非對稱金鑰。

在用 Azure Key Vault 設定 TDE 後,請使用這個程序。 如需初始設定指示,請參閱 使用 Azure Key Vault 為 SQL Server 設定透明資料加密。

Important

SQL Server 不會自動旋轉用於 TDE 的非對稱金鑰。 旋轉是手動操作。

旋轉邏輯 TDE 保護器是線上操作,通常完成很快,因為 SQL Server 只重新加密資料庫加密金鑰(DEK),而非整個資料庫。

旋轉後不要刪除之前的鍵版本。 早期版本仍可能需要用於恢復舊備份、交易日誌或其他復原產物。

先決條件

  • 完成初步的EKM和TDE設定。
  • 確認 SQL Server 目前能存取金鑰庫。
  • 確保你有權限在 SQL Server 中建立憑證、登入和非對稱金鑰。
  • 確保您的認證模型仍然有效:
    • 服務主體:應用程式註冊和客戶端秘密是有效的。
    • 管理身份:SQL Server 的管理身份仍處於啟用狀態,並擁有所需的金鑰權限。

旋轉鑰匙

選擇你的認證模式並依照相應步驟操作。

  1. 在 Azure Key Vault 或 Managed HSM 中,旋轉金鑰:

    • 建立相同金鑰名稱的新版本,或
    • 建立一個新的關鍵字名稱。
  2. 在 SQL Server 中,如果需要,可以建立輪替操作的憑證。

    CREATE CREDENTIAL <new_credential_name>
       WITH IDENTITY = <key_vault_name_or_uri_without_https>,
       SECRET = '<client_id_without_hyphens><client_secret>'
       FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
    
  3. 將憑證加入設定主體,產生下一個非對稱金鑰。

    ALTER LOGIN [<domain>\<login>]
       ADD CREDENTIAL [<new_credential_name>];
    
  4. 從 Azure Key Vault 建立新的 SQL Server 非對稱金鑰。

    Note

    手動輪換時,SQL Server 支援無版本鍵名稱與版本化鍵參考:

    • Versionless:用<key_name>來讓 SQL Server 使用 Azure Key Vault 中最高可用的密鑰版本。
    • 版本化:使用 <key_name>/<version> 將加密作業固定到特定的金鑰版本。

    你不需要建立不同的 AKV 金鑰名稱來輪換。 透過建立新的金鑰版本,然後建立參照未指定版本或指定版本形式的新 SQL Server 非對稱金鑰,來輪換金鑰。

    使用無版本的金鑰名稱或特定的金鑰版本:

    CREATE ASYMMETRIC KEY <new_ekm_key_name>
       FROM PROVIDER [AzureKeyVault_EKM]
       WITH PROVIDER_KEY_NAME = '<key_name_or_key_name/version>',
       CREATION_DISPOSITION = OPEN_EXISTING;
    
  5. 用新的非對稱金鑰建立一個新的登入。

    CREATE LOGIN <new_login_name>
       FROM ASYMMETRIC KEY <new_ekm_key_name>;
    
  6. 將憑證映射從設定登入移到新的非對稱金鑰登入。

    ALTER LOGIN [<domain>\<login>]
       DROP CREDENTIAL [<new_credential_name>];
    
    ALTER LOGIN <new_login_name>
       ADD CREDENTIAL [<new_credential_name>];
    
  7. 使用新的非對稱金鑰重新加密資料庫加密金鑰(DEK)。

    USE [<database_name>];
    GO
    ALTER DATABASE ENCRYPTION KEY
       ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
    

確認旋轉

  1. 驗證資料庫的加密元資料。

    SELECT encryptor_type,
           encryption_state_desc,
           encryptor_thumbprint
    FROM sys.dm_database_encryption_keys
    WHERE database_id = DB_ID('<database_name>');
    
  2. 確認 SQL Server 非對稱金鑰的指紋。

    SELECT name,
           algorithm_desc,
           thumbprint
    FROM sys.asymmetric_keys
    WHERE name = '<new_ekm_key_name>';
    
  3. 確認指紋是否吻合。