web-dev-qa-db-ja.com

常に暗号化:暗号化された列を挿入または更新する方法は?

SQL Serverデータベースのテーブルの列の1つに「常に暗号化」を設定しました。 「列暗号化設定=有効」オプションを渡した後、クライアントSSMSからデータを選択して表示できます。

しかし、テーブルにデータを挿入しようとすると、次のエラーが発生します。

メッセージ206、レベル16、状態2、行1のオペランドタイプの衝突:varcharは、(encryption_type = 'RANDOMIZED'、encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256'、column_encryption_key_name = 'CEK_Autoname'_column_en_keyname'_column_en_keyname_)で暗号化されたvarchar(8000)と互換性がありませんcollat​​ion_name = 'SQL_Latin1_General_CP1_CI_AS'

ここでは、単純な挿入TSQLステートメントをクエリしています。それを機能させるには、どのような変更を加える必要がありますか?

また、アプリケーションを介して暗号化された列を更新または挿入する場合、アプリケーションまたはアプリケーションコードにどのような変更を加える必要がありますか?

2
Shaurya S

SSMSが使用しているAPIに対してクエリをパラメーター化できるように、値には変数を使用する必要があります。何かのようなもの:

    DECLARE @fname varchar(30) = 'Kula'
DECLARE @ename varchar(30) = 'Kalle'
DECLARE @pnr varchar(11) = '752312-4545'
DECLARE @age tinyint = 45

insert into dbo.Personer2 (Förnamn, Efternamn, Personnummer, Ålder) 
VALUES (@fname, @ename, @pnr, @age)

SELECT * FROM Personer2
2
Tibor Karaszi