Sql 2016 Always Encrypted -包含加密列和非加密列的连接操作

本文关键字:加密 连接 操作 2016 Encrypted -包 Sql Always | 更新日期: 2023-09-27 18:15:18

如何在Sql server 2016中执行加密列和非加密列的连接操作。我使用。net framework 4.6.1。列加密设置=在连接字符串中启用。

代码:

cmd = new SqlCommand("select determin.name as name from determin inner join determinjoin on determin.name = determinjoin.name ", con); 
错误:

    The data types varchar(20) encrypted with (encryption_type = 
'DETERMINISTIC', encryption_algorithm_name = 
'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto4', 
column_encryption_key_database_name = 'depdb') collation_name = 
'Latin1_General_BIN2' and varchar are incompatible in the equal to operator.

Sql 2016 Always Encrypted -包含加密列和非加密列的连接操作

事实上,你不能。查询处理器无权访问要为连接解密的密钥。如果您确实必须连接两个表,则应该使用确定性加密对两个列进行加密。

也就是说,你可能仍然不想这样做。对于超过几百万行的任何东西,性能都将从糟糕到糟糕。如果您确实必须这样做,并且没有修改模式的选项,那么测试一下,看看用户在看到它的执行情况后是否仍然有相同的感觉。如果您可以对模式进行微调,那么有一些选项可以使这更容易。例如,为这样的连接使用一些替代列。可以是代理密钥,也可以是对安全性不敏感的自然密钥。