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

.NET 7 API连接启用Always Encrypted的Azure SQL数据库报错求助

排查与解决.NET7 API连接Azure SQL Always Encrypted(AKV)错误

错误核心分析

报错明确指向:Azure Key Vault密钥路径无效,可信端点仅限密钥保管库根路径,这是核心问题,优先从以下方向排查:

1. 修正数据库列主密钥(CMK)路径

执行SQL查询检查数据库中CMK的配置:

SELECT name, key_store_provider_name, key_path FROM sys.column_master_keys;

如果返回的key_path包含密钥版本(格式如https://{testtest}.vault.azure.net/keys/{testtest}/a5949e32107f409f9a509c5385fb4eed),需修改为无版本的密钥路径:

ALTER COLUMN MASTER KEY [你的CMK名称] 
WITH (
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
    KEY_PATH = N'https://{testtest}.vault.azure.net/keys/{testtest}'
);

原因:旧版AKV提供商或Key Vault网络配置可能限制了带版本的路径访问。

2. 验证Key Vault网络与访问权限

  • 网络配置:进入Azure Key Vault的「网络」设置,若启用「选定的网络」,需:
    • 添加Azure SQL Database的公共IP到允许列表
    • 勾选「允许受信任的Microsoft服务访问此密钥保管库」
  • 访问策略:确保API使用的服务主体(Azure注册应用)拥有密钥权限:Get、Unwrap Key、Wrap Key,作用范围设为「此密钥保管库」;若Azure SQL使用托管标识访问AKV,需给该标识配置相同权限。

3. 升级NuGet包与完善初始化代码

  • 将Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider升级至5.1.1及以上版本(兼容.NET7,修复了旧版本的路径解析问题)
  • 确保API中正确注册AKV提供商:
using Microsoft.Data.SqlClient;
using Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider;
using Azure.Identity;

// 在应用启动时注册(比如Program.cs)
var akvProvider = new SqlColumnEncryptionAzureKeyVaultProvider(new DefaultAzureCredential());
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>
{
    { SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, akvProvider }
});
  • 确认DbContext使用Microsoft.Data.SqlClient作为数据库驱动(EF Core需配置UseSqlServer时指定该驱动)。

4. 连接字符串与运行环境验证

  • 确保连接字符串中Column Encryption Setting=enabled无拼写错误
  • 本地开发时,确保Azure CLI已登录对应订阅(az login),生产环境确保服务主体的AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID环境变量配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:41