Sql server 加密字段的部分搜索

Sql server 加密字段的部分搜索,sql-server,database,search,encryption,Sql Server,Database,Search,Encryption,最近,我遇到了一个问题,对数据库字段(如SSN)进行加密,但仍然必须对其进行“部分搜索” 例如:SSN 123-45-6789在数据库中加密为abcdxyz。当用户在搜索框中输入“2345”时,它必须出现在结果中 数据库中有数百万条记录。我们正在使用SQLServer2008R2。我一直在谷歌上搜索,但仍然没有找到任何好的解决方案。有什么好的解决办法吗 谢谢你的帮助。不,没有。如果可以搜索加密字段,那么根据定义,它将被严重加密。可能的替代方案是: 搜索解密的值。这在实践中是无法忍受的缓慢,因为每

最近,我遇到了一个问题,对数据库字段(如SSN)进行加密,但仍然必须对其进行“部分搜索”

例如:SSN 123-45-6789在数据库中加密为abcdxyz。当用户在搜索框中输入“2345”时,它必须出现在结果中

数据库中有数百万条记录。我们正在使用SQLServer2008R2。我一直在谷歌上搜索,但仍然没有找到任何好的解决方案。有什么好的解决办法吗


谢谢你的帮助。

不,没有。如果可以搜索加密字段,那么根据定义,它将被严重加密。可能的替代方案是:

  • 搜索解密的值。这在实践中是无法忍受的缓慢,因为每个查询都必须解密数百万个值
  • 只搜索精确匹配。由于加密值是盐析的,只有在加密数据中存储加密安全的散列并且对散列值进行搜索时,才可能进行精确匹配搜索
  • 使用而不是列加密

  • 选项3)是目前为止最好的,但需要企业版许可。如果TDE不可用,则必须删除部分搜索的要求,没有实际的方法来满足它。

    SSN的可能值少于10亿,且分布不均匀。如果有人要获取您数据库的副本,对任何特定记录进行暴力攻击都是很简单的。事实上,如果一个人的出生日期和状态在记录中是明文的,并且他们出生在2011年之前,那么定制算法可以极大地减少可能的SSN数量,从而使暴力攻击更加容易

    正如您所注意到的,一旦对数据进行加密,如果不首先解密每个记录,就无法搜索数据的明文,这是一项代价不合理的操作


    我赞同保护人们隐私的愿望,但您应该使用TDE、BitLocker或EFS,而不是像这样对单个字段进行加密。

    谢谢您的建议,请记住我也接受这个答案,但StackOverflow只允许接受一个:)