SQL Server Always Encrypt查询报错:无法通过AZURE_KEY_VAULT解密列加密密钥
解决Always Encrypt + Azure Key Vault解密失败问题
针对你遇到的无法解密加密列、无法通过Azure Key Vault解密列加密密钥的问题,按以下步骤排查修复:
验证列主密钥(CMK)与Azure Key Vault的关联
执行以下查询确认数据库中CMK的配置:SELECT name, key_store_provider_name, key_path FROM sys.column_master_keys;检查
key_path是否指向Azure Key Vault中存在的有效密钥,同时确认该密钥未被删除、禁用或过期。检查AKV访问权限
确保执行查询的身份(无论是SSMS登录账户还是应用服务主体)拥有Azure Key Vault的Get和Unwrap Key权限。如果是通过SSMS连接,需确认使用的Azure AD账户已被授予这些权限;如果是应用程序,需检查服务主体的AKV权限配置。确认列加密密钥(CEK)的有效性
执行查询查看CEK的详细信息:SELECT name, column_master_key_name, encrypted_value FROM sys.column_encryption_keys;将查询结果中
encrypted_value的最后10个字节转换为XX-XX-XX格式,对比错误提示中的63-02-3F-0A-FD-F3-FF-DB-1B-03,确认是同一个CEK。同时验证该CEK关联的CMK是当前可用的那个。检查客户端连接与环境
- 确认连接字符串中
Column Encryption Setting=enabled拼写正确,无语法错误。 - 确保客户端工具(如SSMS)或应用程序使用的SQL驱动支持Always Encrypted与Azure Key Vault集成,建议使用最新版的
Microsoft.Data.SqlClient驱动。
- 确认连接字符串中
排查AKV网络限制
如果Azure Key Vault配置了防火墙或虚拟网络规则,需确认客户端所在的IP地址或虚拟网络已被添加到AKV的允许访问列表中,避免网络层面的访问阻断。
内容的提问来源于stack exchange,提问作者Ranjan
相关产品推荐
相关产品推荐

