在SQL Server 2016中连接始终加密的列

时间:2017-10-02 18:16:01

标签: sql-server sql-server-2016 always-encrypted

我正在尝试连接SQL Server 2016中始终加密的列,我收到以下异常。请帮忙......

One:

(ISNULL(SGTC.FIRST_NAME, '') + ' ' + ISNULL(SGTC.MIDDLE_INITIAL_NAME, '') + ' ' + ISNULL(SGTC.LAST_NAME, '')) AS CLAIMANT_NAME 

Two:

SGTC.FIRST_NAME + '' + SGTC.MIDDLE_INITIAL_NAME + '' + SGTC.LAST_NAME AS CLAIMANT_NAME

错误信息如下:

Msg 206, Level 16, State 2, Line 2
Operand type clash: varchar(50) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_POC_CERTSTORE', column_encryption_key_database_name = 'ALWAYS-ENCRYPT-UIM-WV-DB') collation_name = 'Latin1_General_BIN2' is incompatible with varchar

1 个答案:

答案 0 :(得分:0)

加密列上不允许连接。目前,加密列上唯一可能的操作是相等。这是因为SQL Server没有密钥。

您可能必须在客户端应用程序中实现此逻辑。

来自官方文件

  

确定性加密始终为其生成相同的加密值   任何给定的纯文本值。使用确定性加密允许   对加密的点查找,等同连接,分组和索引   列。但是,也可能允许未经授权的用户猜测   通过检查中的模式来获取有关加密值的信息   加密列,特别是如果有一小部分可能的话   加密值,例如True / False或North / South / East / West区域。   确定性加密必须使用具有binary2的列排序规则   字符列的排序顺序。

     

随机加密使用一种以较少的方式加密数据的方法   可预测的方式。随机加密更安全,但可以防止   搜索,分组,索引和加入加密列。