2

如何对加密列执行“排序依据”(确定性加密 - 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]

我收到一个错误:

消息 33299,级别 16,状态 2,行 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')(或更弱)。

4

1 回答 1

1

加密列不支持排序依据。

更多细节可以在这篇文章中找到

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

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

随机加密使用一种以不太可预测的方式加密数据的方法。随机加密更安全,但会阻止对加密列进行搜索、分组、索引和连接。对将用作搜索或分组参数的列使用确定性加密,例如政府 ID 号。对机密调查评论等数据使用随机加密,这些数据不与其他记录分组,也不用于连接表。有关 Always Encrypted 加密算法的详细信息,请参阅 Always Encrypted Cryptography。

于 2017-08-18T16:10:36.940 回答