2017-10-02 13 views
1

SQL Server 2016で常に暗号化された列を連結しようとしていますが、次の例外が発生します。 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

残念ながら、常に暗号化された列に対しては連結はサポートされていません。 https://stackoverflow.com/questions/44241430/sql-server-2016-is-it-possible-to-concatenate-two-nvarchar-always-encrypted-co これがアプリケーションの一部である場合、アプリケーションの列を解読した後に連結します。 – BWarner

答えて

0

連結は、暗号化された列に許可されていませんで。現在、暗号化された列で可能な唯一の操作は等価です。これは、SQL Serverにキーがないためです。

このロジックをクライアントアプリケーションに実装する必要があります。公式ドキュメントから

決定的暗号化は常に 任意のプレーンテキスト値のために同じ暗号化された値を生成します。確定的な暗号化を使用すると、暗号化された 列のポイントルックアップ、等価結合、グループ化、および索引付けが可能になります。ただし、許可されていないユーザーが 暗号化された列のパターンを調べることで、特にTrue/False、North/South/East /などの小さな値の 暗号化された値がある場合は、暗号化された値に関する情報を は、西部地域。 確定的な暗号化では、文字列のバイナリ2 ソート順の列照合を使用する必要があります。

ランダム化された暗号化では、予測可能な方法でより少ないデータを暗号化する方法が使用されます。ランダム化された暗号化はより安全ですが、暗号化された列の検索、グループ化、インデックス化、および結合を防止します。

関連する問題