【问题标题】:Update/Insert rows in SQL table with encrypted columns using LinqToSQL - Always Encrypt使用 Linq To SQL 在 SQL 表中使用加密列更新/插入行 - 始终加密
【发布时间】:2017-06-28 21:04:14
【问题描述】:

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

我有一个表 [User],我在其中使用“确定性”类型加密了“密码”列。我已经更改了连接字符串,并且能够检索所有行。我已经为这个表创建了存储库。

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

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

消息 206,级别 16,状态 2,第 7 行操作数类型冲突:varchar 是 与用 (encryption_type = 加密的 varchar(20) 不兼容 '确定性',加密算法名称 = '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'

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

我是否缺少某些设置?请指出正确的方向。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢穆赫什。对于我的一些测试,这似乎工作正常,我将检查一些场景并标记您的答案已接受。非常感谢你的帮助。这个简单的问题让我抓狂!
    • 错误 varchar is not compatible with varchar(20) 还说明了当您的列大小小于生成的转换键的情况下,这就是您无法保存它的原因。您也可以尝试增加数据库中列的大小。
    • 这正是我所做的。我将大小增加到 varchar(8000) 并且它起作用了。
    猜你喜欢
    • 2018-03-11
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多