如何在加密列上执行“排序依据”(确定性加密 - SQL 2016)

时间:2017-08-18 14:01:31

标签: sql-server sql-server-2016 always-encrypted ssms-2017

如何在加密列上执行“排序依据”(确定性加密 - SQL Server 2016)?

我在SSMS 2017上执行时遇到错误(需要设置AE)

SELECT * 
FROM [dbo].[X] 
ORDER BY lastName

lastName列的定义如下:

[lastName] [varchar](60) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [X]

我收到错误:

  

Msg 33299,Level 16,State 2,Line 9
  列/变量'lastName'的加密方案不匹配。列/变量的加密方案是(encryption_type ='DETERMINISTIC',encryption_algorithm_name ='AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name ='X',column_encryption_key_database_name ='X')并且靠近行'3'的表达式期望它是(encryption_type =' PLAINTEXT')(或更弱)。

1 个答案:

答案 0 :(得分:0)

加密列不支持排序。

更多详情可在this article

找到

数据库引擎从不对存储在加密列中的纯文本数据进行操作,但仍支持对加密数据进行一些查询,具体取决于列的加密类型。 Always Encrypted支持两种类型的加密:随机加密和确定性加密。

确定性加密始终为任何给定的纯文本值生成相同的加密值。使用确定性加密允许对加密列进行点查找,等式连接,分组和索引。但是,也可能允许未经授权的用户通过检查加密列中的模式来猜测有关加密值的信息,特别是如果存在一小组可能的加密值,例如True / False或North / South / East / West区域。确定性加密必须对字符列使用具有binary2排序顺序的列排序规则。

随机加密使用以较不可预测的方式加密数据的方法。随机加密更安全,但阻止了对加密列的搜索,分组,索引和连接。 对将用作搜索或分组参数的列使用确定性加密,例如政府ID号。对机密调查注释等数据使用随机加密,这些数据不与其他记录分组,也不用于连接表。有关始终加密加密算法的详细信息,请参阅始终加密加密。