適用於: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 的管理身份仍處於啟用狀態,並擁有所需的金鑰權限。
旋轉鑰匙
選擇你的認證模式並依照相應步驟操作。
在 Azure Key Vault 或 Managed HSM 中,旋轉金鑰:
- 建立相同金鑰名稱的新版本,或
- 建立一個新的關鍵字名稱。
在 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;將憑證加入設定主體,產生下一個非對稱金鑰。
ALTER LOGIN [<domain>\<login>] ADD CREDENTIAL [<new_credential_name>];從 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;- Versionless:用
用新的非對稱金鑰建立一個新的登入。
CREATE LOGIN <new_login_name> FROM ASYMMETRIC KEY <new_ekm_key_name>;將憑證映射從設定登入移到新的非對稱金鑰登入。
ALTER LOGIN [<domain>\<login>] DROP CREDENTIAL [<new_credential_name>]; ALTER LOGIN <new_login_name> ADD CREDENTIAL [<new_credential_name>];使用新的非對稱金鑰重新加密資料庫加密金鑰(DEK)。
USE [<database_name>]; GO ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
確認旋轉
驗證資料庫的加密元資料。
SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('<database_name>');確認 SQL Server 非對稱金鑰的指紋。
SELECT name, algorithm_desc, thumbprint FROM sys.asymmetric_keys WHERE name = '<new_ekm_key_name>';確認指紋是否吻合。