始终加密:如何插入或更新加密列?

SSS*_*SSS 6 sql-server t-sql encryption sql-server-2016 always-encrypted

我已在 SQL Server 数据库表的一列上配置了“始终加密”。通过“列加密设置 = 已启用”选项后,我可以从客户端 SSMS 选择和查看数据。

但是当我尝试将数据插入表中时,出现以下错误:

消息 206,级别 16,状态 2,第 1 行操作数类型冲突:varchar 与使用 (encryption_type = 'RANDOMIZED', Encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TEST' 加密的 varchar(8000) 不兼容)排序规则名称 = 'SQL_Latin1_General_CP1_CI_AS'

我在这里查询简单的插入 TSQL 语句。我需要做出哪些改变才能使其发挥作用?

另外,如果我们想通过应用程序更新或插入加密列,需要对应用程序或应用程序代码进行哪些更改?

Tib*_*szi 4

您需要使用变量作为值,以便 SSMS 可以根据其正在使用的 API 参数化查询。就像是:

\n\n
    DECLARE @fname varchar(30) = 'Kula'\nDECLARE @ename varchar(30) = 'Kalle'\nDECLARE @pnr varchar(11) = '752312-4545'\nDECLARE @age tinyint = 45\n\ninsert into dbo.Personer2 (F\xc3\xb6rnamn, Efternamn, Personnummer, \xc3\x85lder) \nVALUES (@fname, @ename, @pnr, @age)\n\nSELECT * FROM Personer2\n
Run Code Online (Sandbox Code Playgroud)\n

  • 只要您的应用程序使用 ADO.NET 中的参数,那么您只需添加连接字符串属性即可。在 ADO.NET 中使用参数化 SQL Server 几十年来一直是最佳实践,因此希望您的应用程序已经这样做了。 (2认同)