0

Sqlサーバー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.
4

1 に答える 1

1

そのままでは、できません。クエリ プロセッサは、結合の暗号化を解除するためのキーにアクセスできません。2 つのテーブルを結合する必要がある場合は、両方の列を決定論的暗号化で暗号化する必要があります。

そうは言っても、あなたはまだやりたくないかもしれません。数百万行を超えると、パフォーマンスは悪くなります。本当にスキーマを変更する必要があり、スキーマを変更するオプションがない場合は、パフォーマンスを確認した後もユーザーが同じように感じるかどうかをテストして確認してください。スキーマを微調整できる場合は、これを簡単にするオプションがあります。たとえば、そのような結合に代替列を使用します。代理キーである可能性もあれば、セキュリティが重視されない自然キーである可能性もあります。

于 2016-11-03T16:58:55.693 に答える