0

我有一个表,其中包含datetime使用 SQL Server 2016 上的 Always Encrypted 功能加密的列。

现在我正在尝试执行这个简单的选择:

select max(dt_order) 
from orders 
where customer = 123;

我遇到了这个错误:

消息 33299,级别 16,状态 2,行 5
列/变量“dt_order”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'myColHML', column_encryption_key_database_name = 'TESTING') 并且行 '1' 附近的表达式期望它是 (encryption_type = ' PLAINTEXT')(或更弱)。

在 SSMS 中,我已经设置了连接选项“Column Encryption Setting=Enabled”,并且我还设置了查询选项“Enable Parametrization for Always Encrypted”

任何想法?

4

1 回答 1

0

由于您的数据是在客户端使用密钥加密的,SQL Server 将无法计算最大值。这是因为 SQL Server 没有密钥。Always Encrypted 的主要价值主张是它可以保护 SQL Server 管理员的数据。目前,对加密列唯一可能的操作是相等。

来自官方文档

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

随机加密使用一种以不太可预测的方式加密数据的方法。随机加密更安全,但会阻止对加密列进行搜索、分组、索引和连接。

于 2017-09-14T23:10:13.787 回答