admin

像运算符一样在SQL Server中的加密列上进行搜索

sql

我在sqlserver中有一个表,我的表有一个字符串字段,例如FirstName(这只是示例!)。此字段“
EncryptByPassPhrase”在插入数据库之前。

Before encode: Ali
After  encode: 0x010000001D905174BB7947AE1C600A4AB564A123310F92C21C9A4221

现在,我将在此字段上进行搜索,例如,我将获取包含字符“ Al”的所有字段。

我可以解码该字段并进行搜索,例如:

select * from EncodeTest e
where  dbo.Decoder(e.FirstName) like '%Al%'

但是这种方式在许多记录上非常慢。请帮助我以获得最佳解决方案。

谢谢。


我尝试过的是:

declare @EncodedName varbinary(max)
select @EncodedName =EncryptByPassPhrase('key', cast( @Name as varbinary(max)) )


declare @DecodedName nvarchar(max)
select @DecodedName=convert(varchar(100),DecryptByPassPhrase('key',cast( @EncodedName as varbinary(max)) ))

select * from EncodeTest e
where dbo.Decoder(e.FirstName) like '%Al%'

阅读 155

收藏
2021-07-01

共1个答案

admin

加密(通常是安全性)是对便利性的折衷。如果您想确保安全,则必须牺牲访问的便利性。如果要易于访问和快速访问,则必须牺牲安全性。作为开发人员,您的工作是在两者之间找到适当的平衡。在您的情况下,显然服务器需要解密
所有数据 才能搜索所需的文本。如果您需要搜索加密的数据,那么您的设计就很糟糕。要么找到另一种保护数据的方式,要么放弃有效地搜索数据。

我会说,为什么要加密名称?数据库已经具有安全层来保护您的数据(透明数据加密,数据库用户权限等),这将保护数据免遭未经授权的访问。您应该只加密真正敏感的信息,例如信用卡号,社会保险号及其等效物等。在每个字段(或名称等相对无害的字段)中使用加密来滥用加密将使您的应用程序非常不便,通常不会这样做。不值得的努力。

2021-07-01