Sql 2016始终加密 - 使用加密和非加密列加入操作?

时间:2016-10-28 06:12:41

标签: c# .net c#-4.0 sql-server-2016 always-encrypted

如何在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.

1 个答案:

答案 0 :(得分:1)

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

那就是说,你可能仍然不想这样做。对于任何超过几百万行的行为,性能将从糟糕到糟糕。如果你真的必须而且没有选择来修改架构,那么测试并看看你的用户在看到它的表现后是否仍然感觉相同。如果您可以对架构进行小的调整,可以选择使这更容易。例如,使用一些备用列进行此类连接。可能是代理键,甚至可能是不安全敏感的自然键。