我使用列加密在sql 2016表中加密了几列。现在我想将数据插入到该表中。我尝试创建一个存储过程并使用参数执行该过程,但我收到了以下错误。
列/变量' @ lastName'的加密方案不匹配。该 列/变量的加密方案是(encryption_type = ' PLAINTEXT')和线附近的表达' 0'期待它 (encryption_type =' DETERMINISTIC',encryption_algorithm_name = ' AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = ' CEK_Auto1',column_encryption_key_database_name =' BROps_TestDB')(或 弱)。
此外,我有一个现有的应用程序,其中使用SQL 2008中的实体框架在表中插入值(我们正尝试将其升级到SQl 2016以获得始终加密功能)。 那么,是否有任何标志或任何方法可以将数据插入到SQL 2016(列加密)中,而我们的代码变化很小?
我已经提供了示例存储过程代码和该存储过程的执行。
CREATE PROCEDURE dbo.AddCustomer
@CustomerID int,
@FirstName nvarchar(25),
@LastName nvarchar(25),
@SIN nvarchar(11),
@CreditCardNumber nvarchar(25),
@EmailAddress nvarchar(50),
@PhoneNumber nvarchar(25),
@TerritoryID int
AS
BEGIN
INSERT INTO [dbo].[Customers]
([CustomerID]
,[FirstName]
,[LastName]
,[SIN]
,[CreditCardNumber]
,[EmailAddress]
,[PhoneNumber]
,[TerritoryID])
VALUES
(@CustomerID,
@FirstName,
@LastName,
@SIN,
@CreditCardNumber,
@EmailAddress,
@PhoneNumber,
@TerritoryID)
END
----------------------------------------
DECLARE @CustomerID int,
@FirstName nvarchar(25),
@LastName nvarchar(25),
@SIN nvarchar(11),
@CreditCardNumber nvarchar(25),
@EmailAddress nvarchar(50),
@PhoneNumber nvarchar(25),
@TerritoryID int
SET @CustomerID = 1
SET @FirstName = 'David'
SET @LastName = 'Postlethwaite'
SET @SIN = '12345-3-ee-3'
SET @CreditCardNumber = '1111-1233-1231-1233'
SET @EmailAddress = 'david@clunyweb.co.uk'
SET @PhoneNumber = '406555'
SET @TerritoryID = 1
execdbo.AddCustomer @CustomerID,@FirstName,@LastName,@SIN,@CreditCardNumber,@EmailAddress,
@PhoneNumber,@TerritoryID
答案 0 :(得分:1)
要直接从SSMS将数据插入加密列,您需要将Parameterization for Always Encrypted
设置为True
。
然而,SSMS 2016不支持此功能,因此您需要安装可以找到here的较新版本的SSMS。
获得SSMS 17.0后,您需要在连接到实例时为连接启用列加密。
要将数据插入指定的加密列,请在打开新查询窗口时执行以下操作:
Query Options
菜单Query
Advanced
中,选择Enable Parameterization for Always Encrypted
现在,您将能够从SSMS直接将数据插入到表中。
要以纯文本格式查看加密列值,您需要Enable
Column Encryption Setting
。为此,请执行以下操作:
Connect to Server
对话框Options
Additional Connection Parameters
Column Encryption Setting = Enabled
答案 1 :(得分:0)
此外,您还需要在一行中声明并启动变量以使其工作
DECLARE @rvalue AS CHAR (9) = '124'; INSERT INTO .[dbo].[test] ([value], [desc]) VALUES (@rvalue'test');
答案 2 :(得分:-1)
您可以使用应用程序或通过SSMS将数据插入加密列。请参阅this article,其中介绍了如何使用存储过程将数据插入Always Encrypted列。
请查看this article,了解如何使用Always Encrypted参数化将值插入加密列。 另请参阅this article
的“始终加密的参数化”部分This article描述了如何使用应用程序
在始终加密的列中插入值要使用Always Encrypted with Entity Framework,请关注this article。