适用于:SQL Server
本文介绍如何使用可扩展密钥管理(EKM)和Azure 密钥保管库手动轮换透明数据加密(TDE)使用的非对称密钥。
使用 Azure 密钥保管库 配置 TDE 后使用此过程。 有关初始设置说明,请参阅使用SQL Server Azure 密钥保管库设置透明数据加密。
Important
SQL Server不会自动轮换用于 TDE 的非对称密钥。 旋转是手动操作。
轮换逻辑 TDE 保护器是一种联机操作,通常快速完成,因为SQL Server只重新加密数据库加密密钥(DEK),而不是整个数据库。
轮换后不要删除以前的密钥版本。 较早版本仍可能是还原旧备份、事务日志或其他恢复文件所必需的。
在您开始之前
- 完成初始 EKM 和 TDE 设置。
- 验证SQL Server当前是否可以访问密钥保管库。
- 确保你有权在SQL Server中创建凭据、登录名和非对称密钥。
- 确保身份验证模型仍然有效:
- 服务主体:应用注册和客户端密码有效。
- 托管标识:SQL Server托管标识仍处于启用状态,并且具有所需的密钥权限。
轮换密钥
选择身份验证模型并按照匹配的步骤进行操作。
在Azure 密钥保管库或托管 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 密钥保管库 创建新的 SQL Server 非对称密钥。
注释
对于手动轮换,SQL Server同时支持无版本密钥名称和版本控制密钥引用:
- 无版本号:使用
<key_name>让 SQL Server 使用 Azure 密钥保管库 中最高可用的密钥版本。 - 已版本化:使用
<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;- 无版本号:使用
从新的非对称密钥创建新的登录名。
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>';确认指纹匹配。