如何在SQL Server上使用Like运算符始终加密列?

时间:2018-01-26 16:11:31

标签: sql-server encryption sql-server-2016 always-encrypted

请帮助我修复SQL Sever 2016中的以下查询,其中FIRST_NAME,LAST_NAME列始终是加密的。

sceneView

我收到以下错误,因为列始终是加密的,而且我也无法声明变量并为其分配字符串。

SELECT * FROM MY_TABLE
WHERE (LAST_NAME LIKE '%[@,#,$,%,*]%' OR LAST_NAME LIKE '%,%')
OR (FIRST_NAME LIKE '%[@,#,$,%,*]%' OR FIRST_NAME LIKE '%,%');

2 个答案:

答案 0 :(得分:3)

很遗憾,如果FIRST_NAME和LAST_NAME始终加密,则您无法使用LIKE运算符搜索字符串。

查询可以对使用确定性加密加密的列执行相等比较,但不执行其他操作(例如,大于/小于,使用LIKE运算符进行模式匹配或算术运算)。

参考:https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine

答案 1 :(得分:0)

从SQL Server 2019开始,Secure Enclaves功能允许完全查询Always Encrypted列-与LIKE进行模式匹配,范围和排序-包括随机列(不仅仅是确定性的)。

在不使用安全区域的情况下,查询仅限于搜索完全匹配。 (始终也可以在JOIN,GROUP BY和DISTINCT中使用加密字段。)

这里提供了有关“始终加密和安全区域”的很好的介绍:

https://www.pass.org/PASS-Blog/introducing-always-encrypted-with-secure-enclaves-in-sql-server-2019-1