使用LinqToSQL在SQL表中使用加密列更新/插入行 - 始终加密

时间:2017-06-28 21:04:15

标签: c# sql-server linq-to-sql sql-server-2016 always-encrypted

我正在尝试使用SQL Server 2016的Always Encrypt功能。我正在使用现有的应用程序和数据库来执行此操作。

我有一个表[User],我已经用'Deterministic'类型加密了'Password'列。我已经更改了连接字符串,我可以检索所有行。我已经为这个表创建了存储库。

我正在尝试使用InsertOnSubmit()和SubmitChanges()在LinqToSQL中插入和更新此表中的行。

但每当我尝试插入新行或更新现有行时,我都会收到错误:

  

消息206,级别16,状态2,行7操作数类型冲突:varchar是   与使用(encryption_type =。)加密的varchar(20)不兼容   'DETERMINISTIC',encryption_algorithm_name =   'AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name =   'CEK_Auto1',column_encryption_key_database_name ='BRO_UAT')   collat​​ion_name ='Latin1_General_BIN2'

我读过使用Stored Procs和参数化解决了这个问题的文章。但是,正如我之前提到的,这是一个现有项目,我使用过LinqToSql并且不想更改代码。如果列未加密,插入/更新可以正常工作!

我错过了一些设置吗?请指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

将列更改为nvarchar并检查。 此外,即使存储密码也不是最好的方法,而是存储签名,并在验证密码时验证该签名。

检查链接是否相同。 https://social.msdn.microsoft.com/Forums/en-US/77bb69f0-590e-40f5-b5e9-714bf590e008/how-to-handle-encrypted-column?forum=linqtosql