我在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%'
加密(通常是安全性)是对便利性的折衷。如果您想确保安全,则必须牺牲访问的便利性。如果要易于访问和快速访问,则必须牺牲安全性。作为开发人员,您的工作是在两者之间找到适当的平衡。在您的情况下,显然服务器需要解密 所有数据 才能搜索所需的文本。如果您需要搜索加密的数据,那么您的设计就很糟糕。要么找到另一种保护数据的方式,要么放弃有效地搜索数据。
我会说,为什么要加密名称?数据库已经具有安全层来保护您的数据(透明数据加密,数据库用户权限等),这将保护数据免遭未经授权的访问。您应该只加密真正敏感的信息,例如信用卡号,社会保险号及其等效物等。在每个字段(或名称等相对无害的字段)中使用加密来滥用加密将使您的应用程序非常不便,通常不会这样做。不值得的努力。