gpt4 book ai didi

sql-server - WHERE 子句中的 SQL 加密列

转载 作者:行者123 更新时间:2023-12-03 08:22:38 24 4
gpt4 key购买 nike

我希望使用对称 key 应用 SQL 列级加密。创建数据库主 key 、证书和对称 key 所需的初始步骤似乎很简单,我已经成功测试了使用对称 key 加密/解密数据。

但是,一旦数据被加密,我不知道如何最好地查询它。例如

SELECT PlainTextA, PlainTextB, PlainTextC 
WHERE CONVERT(varchar, DECRYPTBYKEY(EncyptedColumn)) = @SearchTerm

肯定会导致全表扫描?

我认为可能可行的另一个选择是首先加密搜索条件,例如
SELECT PlainTextA, PlainTextB, PlainTextC 
WHERE EncyptedColumn = ENCRYPTBYKEY(KEY_GUID('KeyName'), @SearchTerm)

但这不起作用,因为生成的加密值总是不同的。

任何建议将不胜感激。

最佳答案

典型的方法是存储加密值和值的单向散列。当您寻找特定值时,您会寻找哈希值。通过这种方式,您可以有效地查询,而不必解密每一行才能找到您感兴趣的值:

create table Table (
EncryptedColumn varbinary(max),
HashValue binary(20),
PlainA int,
PlainB varchar(256),
PlainC Datetime);

create index ndxTableHash on Table(HashValue);

select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm);

理论上,您可以在蓝色月亮中发生一次哈希冲突,为了安全起见,您可以在解密列上添加双重检查:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;

另见 Indexing encrypted dataSQL Server 2005: searching encrypted data .

关于sql-server - WHERE 子句中的 SQL 加密列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3560707/

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