Sql 2016 Always Encrypted - 与加密和非加密列的连接操作?

Sql 2016 Always Encrypted - Join operation with Encrypted and Non Encrypted column?

如何在 Sql 服务器 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.

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

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