类似于SQL server中加密列上的运算符搜索

类似于SQL server中加密列上的运算符搜索,sql,sql-server,tsql,encryption,Sql,Sql Server,Tsql,Encryption,我在sqlserver中有一个表,我的表有一个字符串字段,例如FirstName(这只是一个示例!)。在数据库上插入之前,此字段为“EncryptBypassPhase” Before encode: Ali After encode: 0x010000001D905174BB7947AE1C600A4AB564A123310F92C21C9A4221 现在我将搜索这个字段,例如,我将获得包含字符“Al”的所有字段 我可以解码此字段并搜索,例如: 但这种方式在很多记录上都非常缓慢。 请帮我

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

Before encode: Ali
After  encode: 0x010000001D905174BB7947AE1C600A4AB564A123310F92C21C9A4221
现在我将搜索这个字段,例如,我将获得包含字符“Al”的所有字段

我可以解码此字段并搜索,例如:
但这种方式在很多记录上都非常缓慢。 请帮我找到最好的解决办法

谢谢


我所尝试的: 加密(通常是安全性)是一种方便的折衷方案。如果你想安全,你必须牺牲容易接近。如果你想方便快捷,那么你必须牺牲安全性。作为开发人员,您的工作是在这两者之间找到正确的平衡。在您的情况下,服务器显然需要解密您的所有数据,以便能够搜索您想要的文本。如果您需要搜索加密数据,那么您的设计就被破坏了。要么找到另一种方法来保护您的数据,要么放弃高效搜索


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

数据是加密的。您希望SQL Server在解密之前如何进行搜索?您需要改变您的观点。如果你的加密列可以用SQL解密,我说你做错了。如果需要在表中搜索一列,则不应加密数据;效率不高。如果您需要保护您的数据,您可以提高您对SQL中的安全性和权限的了解。我希望SQL Server在不解密的情况下进行搜索:)感谢亲爱的@imankazemi,我将加密列以避免在选择中显示数据并允许对其进行搜索!我知道这很神奇,但作为开发者,我必须搜索这些内容并得到令人信服的答案。非常感谢亲爱的@andrey,我创建了一个字典表,可以更快地找到记录。但我不会将解密后的文本保存在sql中。再次感谢您的新编辑:)您的答案是正确的,但“名称”只是一个示例,我必须作为开发人员对此主题进行研究,并获得最佳答案!
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%'