SQL Azure安全飞地问题:LIKE子句执行失败报错
Azure SQL安全飞地环境下LIKE查询报错解决方案
问题背景
- 数据库版本:Microsoft SQL Azure (RTM) - 12.0.2000.8
- 配置:已基于VBS(虚拟化基安全)配置安全飞地,通过Azure Key Vault创建列主密钥
- 异常表现:插入、带WHERE子句的更新等操作均正常,仅使用LIKE操作符查询加密列时报错;DETERMINISTIC和RANDOMIZED两种加密类型均测试过,问题复现
- 使用工具:SSMS 12.2
可正常执行的代码
EXEC sp_describe_parameter_encryption N'select * from test1 where gender like (@c1)', N'@c1 varchar(10)';
执行失败的代码
declare @c1 varchar(10)='%Male%' select Name from test1 where gender like @c1
报错信息
An error occurred while executing batch. Error message is: Error occurred when reading 'sp_describe_parameter_encryption' resultset. Attestation URL has not been specified in the connection string, but the query requires enclave computations. Enclave type is 'Virtualization Base Security'.
原因分析
对加密列执行带通配符的LIKE模糊查询时,Azure SQL需要在安全飞地内完成加密数据的匹配计算。这种场景下,客户端必须通过指定飞地证明URL来验证飞地的合法性,否则会触发权限验证错误。而插入、精确匹配更新等操作无需飞地内的复杂计算,因此可以正常执行。
解决步骤
获取VBS安全飞地证明URL
- Azure门户路径:进入目标Azure SQL数据库 → 数据安全 → Always Encrypted → 安全飞地,复制页面中的“证明URL”
- Azure CLI命令(替换占位符):
az sql server show -g <资源组名称> -n <SQL服务器名称> --query 'securityEnclaveAttestationUrl'
配置SSMS连接参数
在SSMS连接数据库时:- 点击“选项” → 切换到“连接属性”标签页
- 在“附加连接参数”输入框中添加:
AttestationUrl=<你的飞地证明URL>
示例:
AttestationUrl=https://eus2.database.azure.com/attestation/v1重新连接并测试查询
保存连接设置后重新连接数据库,再次执行LIKE查询即可正常运行。
额外注意
- SSMS 12.2已支持安全飞地证明参数,若仍有问题可尝试升级至最新版SSMS
- 无论使用DETERMINISTIC还是RANDOMIZED加密类型,带通配符的LIKE查询都依赖飞地计算,必须指定证明URL
内容的提问来源于stack exchange,提问作者Ashish Singhal
相关产品推荐
相关产品推荐

