【问题标题】:Concatenate always encrypted columns in SQL Server 2016 [duplicate]在 SQL Server 2016 中连接始终加密的列 [重复]
【发布时间】:2017-10-02 18:16:01
【问题描述】:

我正在尝试连接 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

【问题讨论】:

  • 不幸的是,始终加密的列不支持串联。请参阅stackoverflow.com/questions/44241430/… 如果这是应用程序的一部分,您可以在应用程序中的列被解密后连接它们。

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


【解决方案1】:

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

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

来自官方文档

确定性加密总是生成相同的加密值 任何给定的纯文本值。使用确定性加密允许 加密的点查找、等式连接、分组和索引 列。但是,也可能让未经授权的用户猜测 通过检查模式中的有关加密值的信息 加密列,特别是如果存在一小组可能的 加密值,例如 True/False,或 North/South/East/West 区域。 确定性加密必须使用带有二进制的列排序规则2 字符列的排序顺序。

随机加密使用一种以更少的时间加密数据的方法 可预见的方式。随机加密更安全,但可以防止 对加密列进行搜索、分组、索引和连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多