使用存储过程将数据插入始终加密列

问题描述 投票:0回答:1

我在尝试将数据插入包含加密列的 SQL Server 表时遇到问题。

这是我的方法。

我创建了一个包含三列的表:[ID]、[名称]、[密码]。 [名称] 和 [密码] 列已加密。

with COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [Test_CEK], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256')

我已设置“列加密设置 = 已启用”
我设置了“始终加密的参数化”
我创建了一个将记录插入测试表的过程,如下所示:

USE [TestDB] GO

CREATE PROCEDURE InsertTest
    @name varchar(50),
    @pwd varchar(max)
AS
BEGIN
    INSERT INTO [dbo].[Test] ([Name], [Password])  
    VALUES (@name, @pwd)
END

当我尝试使用此过程插入新行时:

[ EXEC InsertTest 'Test','Test' ]

我收到此错误:

消息 206,级别 16,状态 2,过程 InsertTest,第 0 行 [批量开始行 0]
操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC', Encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Test_CEK', column_encryption_key_database_name = 'TestDB') 加密的 varchar(1) 不兼容 collation_name = 'SQL_Latin1_General_CP1_CI_AS'

我想通过存储过程向SQL表中插入数据。我不想使用 ADO.NET 进行 SQL 连接。

我想使用实体框架实现相同的功能。

这就是我尝试从 C# 调用过程的方式,但没有成功。

Image

sql-server encryption stored-procedures entity-framework-core always-encrypted
1个回答
0
投票

您需要使用参数而不是文字。你可以试试吗

DECLARE @name2 varchar(50) = 'Test'
DECLARE @pwd2 varchar(max) = 'Test'
 
EXEC InsertTest @name = @name2, @pwd = @pwd2
© www.soinside.com 2019 - 2024. All rights reserved.