0

如何在 Sql server 2016 中使用加密和非加密列执行联接操作。我使用 .net 框架 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.
4

1 回答 1

1

照原样,你不能。查询处理器无权访问用于解密连接的密钥。如果你真的必须加入这两个表,你应该用确定性加密来加密这两个列。

也就是说,您可能仍然不想这样做。对于超过几百万行的任何内容,性能都会从糟糕到糟糕。如果您确实必须并且没有修改架构的选项,请测试并查看您的用户在看到它的执行方式后是否仍然有相同的感觉。如果您可以对架构进行小幅调整,则有一些选项可以使这更容易。例如,为此类连接使用一些备用列。可能是代理密钥,甚至可能是对安全不敏感的自然密钥。

于 2016-11-03T16:58:55.693 回答