【发布时间】:2016-10-28 06:12:40
【问题描述】:
如何在 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.
【问题讨论】:
-
此时您不应该问自己更深层次的问题吗?例如,“如果这些数据值得加密,为什么它只在某些表中加密而在其他表中不加密?”
-
这是要求。我必须在一个表中的加密列上加入连接,在另一个表中加入非加密列。
-
我想这是不可能的。存储在 sql server 中的值是加密的。列加密设置不会更改数据页上的基础值。您必须使用 MS 的始终加密算法对未加密的值进行哈希处理,以使两个值在连接时匹配。
标签: c# .net c#-4.0 sql-server-2016 always-encrypted