暗号化された列 (Always Encrypted) から変数にデータを選択するストアド プロシージャがエラーで失敗する
セッションが強制終了状態のため、実行を続行できません
がオンに設定されている場合XACT_ABORT
。
行を削除SET XACT_ABORT ON;
すると、ストアド プロシージャは完全に機能しますが、それがどのように関連しているかは不明です。
変数を完全に削除すると、エラーも修正されます。
環境:
- Microsoft SQL Server 2016 Enterprise (64 ビット) Service Pack 2 with CU2 (13.0.5153.0): 現時点での最新ビルド。
- Microsoft Windows NT 6.3 (15063)
ストアド プロシージャ:
CREATE PROCEDURE [SomeStoredProcedure]
WITH EXECUTE AS OWNER
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @EncryptedValue VARBINARY(4096);
SELECT TOP 1
@EncryptedValue = [someencryptedcolumn]
FROM
[sometable];
SELECT @EncryptedValue
RETURN 0;
END;
テーブル宣言:
CREATE TABLE [sometable]
(
[someencryptedcolumn] [varbinary](4096)
ENCRYPTED WITH
(
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = Randomized,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
NULL
)
サンプルデータ:
INSERT INTO [sometable] ([someencryptedcolumn])
VALUES (NULL)
ストアド プロシージャを呼び出します。
EXEC [SomeStoredProcedure];
エラー:
メッセージ 596、レベル 21、状態 1、行 29
セッションが強制終了状態であるため、実行を続行できません。メッセージ 0、レベル 20、状態 0、行 29
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。
XACT_ABORT と Always Encrypted がどのように関連しているかについての参照は見つかりませんでした。
SQL Server のログも確認しましたが、問題に関する追加情報は見つかりませんでした。
更新: