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

moh*_*gan 2 sql t-sql sql-server encryption

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

Before encode: Ali
After  encode: 0x010000001D905174BB7947AE1C600A4AB564A123310F92C21C9A4221
Run Code Online (Sandbox Code Playgroud)

现在我会在这个字段上搜索,例如我会得到所有包含字符“Al”的字段。

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

select * from EncodeTest e
where  dbo.Decoder(e.FirstName) like '%Al%'
Run Code Online (Sandbox Code Playgroud)

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

谢谢。


我尝试过的:

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%'
Run Code Online (Sandbox Code Playgroud)

And*_*lov 6

加密(一般的安全性)是对便利性的妥协。如果您想要安全,就必须牺牲访问的便利性。如果您想要易于访问和快速,那么您必须牺牲安全性。作为开发人员,您的工作是在这些之间找到适当的平衡。在您的情况下,显然服务器需要解密您的所有数据才能搜索您想要的文本。如果您需要在加密数据中进行搜索,那么您的设计就被破坏了。要么找到另一种方法来保护您的数据,要么放弃高效搜索。

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