web-dev-qa-db-ja.com

ストアドプロシージャを介して挿入するときのAlwaysEncryptedエラー

最初にエラーから始めましょう:

列/変数の暗号化スキームの不一致。列/変数の暗号化スキームは(encryption_type = 'PLAINTEXT')であり、行 '3'付近の式は(encryption_type = 'DETERMINISTIC'、encryption_algorithm_name = ' AEAD_AES_256_CBC_HMAC_SHA_256 '、column_encryption_key_name =' CEK_P_H '、column_encryption_key_database_name =' Payments_Hub ')(または弱い)

ストアドプロシージャの使用時にAlwaysEncrypt暗号化を使用して列に挿入しようとしています。

列「PARAMETER_VALUE」は暗号化された列です

CREATE PROCEDURE dbo.SP_UI_Parameter    
(
@ID int OUTPUT,
@OPERATION_ID int,
@PARAMETER_NAME varchar(100),
@PARAMETER_METRIC varchar(100),
@PARAMETER_VALUE varchar(100) 
)
AS
BEGIN

IF @ID IS NULL
BEGIN

INSERT INTO [dbo].[TOKEN_PARAMETER] (OPERATION_ID,
PARAMETER_NAME, PARAMETER_METRIC, PARAMETER_VALUE)

SELECT @OPERATION_ID, @PARAMETER_NAME, @PARAMETER_NAME, @PARAMETER_VALUE

SET @ID = SCOPE_IDENTITY()

END
ELSE
BEGIN

UPDATE [dbo].[TOKEN_PARAMETER] SET
OPERATION_ID = @OPERATION_ID,
PARAMETER_NAME = @PARAMETER_NAME,
PARAMETER_METRIC = @PARAMETER_METRIC,
PARAMETER_VALUE = @PARAMETER_VALUE

END

END
GO

クエリでエラーが発生するのはなぜですか?

STORED PROCEDUREに含める必要があるものはありますか?

  1. 接続設定に「Column Encryption Setting = Enabled」を含めました
  2. AlwaysEncryptedのパラメーター化も有効にしました
  3. キーはローカルマシンに保存されます
  4. DETERMINISTIC暗号化を作成しました
  5. SSMS 17を使用するSQL Server 2016データベースエンジン-これは問題になりますか?

SQL Serverバージョン情報:(編集済み)

Microsoft SQL Server 2016(SP1-CU7-GDR)(KB4057119)-13.0.4466.4(X64)Dec 22 2017 2017 11:25:00 Copyright(c)Microsoft Corporation Enterprise Edition:Core-based Licensing(64-bit)on Windows Server 2016 Datacenter 10.0(Build 14393:)(ハイパーバイザー)

SSMSストアドプロシージャコール:(編集済み)

DECLARE @return_value int,
@ID int

EXEC    @return_value = [dbo].[SP_Insert_Parameter2]
 @ID = @ID OUTPUT,
 @OPERATION_ID = 3,
 @PARAMETER_NAME = N'algorithm',
 @PARAMETER_METRIC = N'algorithm',
 @PARAMETER_VALUE = N'99999'

 SELECT @ID as N'@ID'

 SELECT 'Return Value' = @return_value

 GO

前もって感謝します

1
Armandt Burger

だから私は私が間違っていたことを理解しましたAlwaysEncryptedは変数をインラインで定義する必要があります:

DECLARE @OPERATION_ID int = 4
DECLARE @PARAMETER_NAME varchar(100) = 'algorithm'
DECLARE @PARAMETER_METRIC varchar(100) = 'algorithm'
DECLARE @PARAMETER_VALUE varchar(100) = 'TestValue3'

INSERT INTO [dbo].[TOKEN_PARAMETER] (OPERATION_ID, PARAMETER_NAME,
PARAMETER_METRIC, PARAMETER_VALUE)
SELECT @OPERATION_ID,
       @PARAMETER_NAME,
       @PARAMETER_METRIC,
       @PARAMETER_VALUE

これにより、テーブルへの挿入が成功します。ストアドプロシージャを使用する場合、同じメソッドを使用して挿入することはできません。

したがって、本質的に、ストアドプロシージャの動作方法に問題はありません。アプリケーションは、同じストアード・プロシージャーを使用して、列を取り込む方法を変更する必要があります

以下のリンクを参照してください:

https://social.technet.Microsoft.com/wiki/contents/articles/37979.working-with-the-always-encrypted-feature-in-sql-server-2016.aspx#Add_Data_to_Always_Encrypted_Column

アプリケーションチームが結果を返すのをまだ待っていますが、これで問題が解決した場合は、質問を解決済みとしてマークします

2
Armandt Burger