SQL table 中的 Update/Insert 行使用 LinqToSQL 加密列 - Always Encrypt

Update/Insert rows in SQL table with encrypted columns using LinqToSQL - Always Encrypt

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

我有一个 table [用户],我用 'Deterministic' 类型加密了 'Password' 列。我更改了连接字符串,并且能够检索所有行。我已经为此 table.

创建了存储库

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

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

Msg 206, Level 16, State 2, Line 7 Operand type clash: varchar is incompatible with varchar(20) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'BRO_UAT') collation_name = 'Latin1_General_BIN2'

我阅读过使用存储过程和参数化解决问题的文章。但是,正如我之前提到的,这是一个现有项目,我已经使用了 LinqToSql,不想更改代码。 Insertion/Update 如果列未加密,则工作正常!

我是不是漏掉了什么设置?请指点我正确的方向。

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

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