gpt4 book ai didi

c# - SQL Server 2016中列加密时如何查询数据

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:48 26 4
gpt4 key购买 nike

我一直在努力寻找解决这个问题的办法。我在 SQL Server 2016 中加密了我数据库中的列。为了读取数据,我已经设置了参数 "Column Encryption Setting=Enabled"; 我知道我的证书没有问题,因为我可以像 SELECT * FROM 这样查询TABLE,但我无法使用 WHERE 条件进行查询。例如“SELECT column FROM Table WHERE column='abc'” 类似的东西。

错误是:

"Operand type clash: varchar is incompatible with varchar(8000) encrypted with (encryption_type = 'DETERMINISTIC',... and so on"

我不知道为什么我无法从加密列中检索数据。

最佳答案

我假设您已经使用 SQL Server 的 Always Encrypted 功能对您的列进行了加密。

使用 Always Encrypted SQL Server 不知道用于加密和解密数据的 key 。在将数据发送到 SQL Server 之前加密数据是客户端应用程序的工作。

当您执行此查询时:

SELECT column FROM Table WHERE column='abc'

您要求 SQL Server 将未加密的 varchar 'abc' 与在您的加密列中找到的加密值进行比较。这将失败 - 正如您自己所注意到的。

您的客户端应用程序必须先加密您要在 WHERE 子句中使用的值,然后再将其发送到 SQL Server。

如果您使用的是 SSMS,则可以通过启用始终加密的参数化来实现。您可以在 SSMS 中的“查询”>>“查询选项”>>“执行”>>“高级”>>“为 Always Encrypted 启用参数化”下启用此功能。

启用后,您将能够像这样过滤表格:

DECLARE @MyValue VARCHAR(100) = 'abc'; 
SELECT [Column] FROM [Table] WHERE [Column] = @MyValue;

在幕后发生的事情是 SSMS 在将 @MyValue 参数的值发送给 SQL Server 之前为您加密它。立即声明和初始化参数很重要。否则 SSMS 无法在将查询发送到 SQL Server 之前加密该值。

您可以阅读更多关于 parameterization for always encrypted here 的信息.如果您不清楚上述解释,请随时在下方发表评论。

关于c# - SQL Server 2016中列加密时如何查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com