如何对加密列执行"排序依据"(确定性加密 - 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,级别 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'((或更弱(。
加密列不支持排序依据。
更多细节可以在本文中找到
数据库引擎从不对存储在加密列中的纯文本数据进行操作,但它仍支持对加密数据进行某些查询,具体取决于列的加密类型。始终加密支持两种类型的加密:随机加密和确定性加密。
确定性加密始终为任何给定的纯文本值生成相同的加密值。使用确定性加密允许对加密列进行点查找、相等联接、分组和索引。但是,但也可能允许未经授权的用户通过检查加密列中的模式来猜测有关加密值的信息,尤其是在存在一小组可能的加密值(如 True/False 或北/南/东/西区域(的情况下。确定性加密必须对字符列使用具有二进制 2 排序顺序的列排序规则。
随机加密使用一种以不太可预测的方式加密数据的方法。随机加密更安全,但会阻止搜索、分组、索引和联接加密列。 对将用作搜索或分组参数的列(例如政府 ID 号(使用确定性加密。对机密调查注释等数据使用随机加密,这些数据不与其他记录分组,也不用于联接表。有关始终加密加密算法的详细信息,请参阅始终加密加密。