You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2016启用TDE时连接Azure政府云密钥库URL错误求助

解决方案:SQL Server 2016 政府云环境下配置TDE连接Azure Key Vault

针对你遇到的SQL Server 2016在Azure政府云启用TDE时,无法强制使用usgovcloudapi.net后缀的问题,结合错误信息(Msg 33049、事件ID 2注册表错误),以下是分步可行的解决方案:

1. 正确配置AzureRM环境(针对政府云)

之前设置Set-AzureRmEnvironment的方式可能不够完整,需要指定政府云环境的所有关键参数,确保端点指向正确:

# 切换并配置Azure政府云环境
Set-AzureRmEnvironment -Name AzureUSGovernment

# 验证环境参数是否正确
Get-AzureRmEnvironment -Name AzureUSGovernment

确认输出中的AzureKeyVaultServiceEndpointResourceId为https://vault.usgovcloudapi.net,AzureKeyVaultDnsSuffix为vault.usgovcloudapi.net。如果参数不符,手动覆盖:

Set-AzureRmEnvironment -Name AzureUSGovernment `
    -AzureKeyVaultServiceEndpointResourceId "https://vault.usgovcloudapi.net" `
    -AzureKeyVaultDnsSuffix "vault.usgovcloudapi.net"

2. 重新配置SQL Server的EKM提供者

确保SQL Server的Azure Key Vault连接器正确关联政府云端点,重新注册提供者并创建凭据:

-- 注册EKM提供者(若未注册)
CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Provider
FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
GO

-- 创建指向政府云密钥库的凭据
CREATE CREDENTIAL Azure_EKM_TDE_Credential
WITH IDENTITY = 'vant4gekeyvault', -- 仅填写密钥库名称
SECRET = '<你的服务主体密钥>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Provider;
GO

-- 将凭据关联到SQL Server服务账户
ALTER LOGIN [NT SERVICE\MSSQLSERVER]
ADD CREDENTIAL Azure_EKM_TDE_Credential;
GO

注意:IDENTITY只需填密钥库名称,正确的政府云后缀会通过已配置的AzureRM环境自动关联。

3. 手动修复注册表项(解决事件ID 2错误)

事件日志中的"Error when accessing registry:5"说明SQL Server无法读取EKM提供者的注册表配置,需手动验证修改:

  • 打开注册表编辑器,导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server\SQLServerConnector\AzureKeyVault
  • 确认存在ServiceEndpoint字符串键,值为https://vault.usgovcloudapi.net
  • 若该键不存在,新建字符串值ServiceEndpoint并设置对应值
  • 重启SQL Server服务,让注册表更改生效

4. 验证密钥库权限

错误Msg 33049多由权限不足导致,确保SQL Server使用的服务主体(或托管身份)拥有密钥库的以下权限:

  • get、wrapKey、unwrapKey(针对TDE密钥)
    通过PowerShell配置权限:
Set-AzureRmKeyVaultAccessPolicy -VaultName "vant4gekeyvault" `
    -ServicePrincipalName "<你的服务主体ID>" `
    -PermissionsToKeys get,wrapKey,unwrapKey

5. 测试TDE密钥创建与加密

最后尝试创建TDE密钥并启用加密,验证配置是否成功:

-- 创建指向政府云密钥库的非对称密钥
CREATE ASYMMETRIC KEY SqlTDEKey
FROM PROVIDER AzureKeyVault_EKM_Provider
WITH PROVIDER_KEY_NAME = '<你的密钥库中的密钥名称>',
CREATION_DISPOSITION = OPEN_EXISTING;
GO

-- 创建数据库加密密钥
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SqlTDEKey;
GO

-- 启用TDE
ALTER DATABASE <你的目标数据库名称>
SET ENCRYPTION ON;
GO

如果以上步骤完成后仍有问题,建议检查SQL Server Connector的版本(确保是支持政府云的最新版本),以及网络防火墙是否允许SQL Server访问usgovcloudapi.net端点。

内容的提问来源于stack exchange,提问作者tyfraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:09:56