最近我被分配了一个问题,加密了 SSN 等数据库字段,但仍然必须保持“部分搜索”的工作。
例如:SSN 123-45-6789 在数据库中被加密为 abcdxyz。当用户在搜索框中输入“2345”时,它必须出现在结果中。
我们在数据库中有数百万条记录。我们正在使用 SQL Server 2008 R2。我一直在谷歌搜索,但仍然没有看到任何好的解决方案。有什么好的解决方案吗?
感谢帮助。
最近我被分配了一个问题,加密了 SSN 等数据库字段,但仍然必须保持“部分搜索”的工作。
例如:SSN 123-45-6789 在数据库中被加密为 abcdxyz。当用户在搜索框中输入“2345”时,它必须出现在结果中。
我们在数据库中有数百万条记录。我们正在使用 SQL Server 2008 R2。我一直在谷歌搜索,但仍然没有看到任何好的解决方案。有什么好的解决方案吗?
感谢帮助。
不,没有。如果可以搜索加密字段,那么根据定义,它将被严重加密。可能的替代方案是:
选项 3) 是迄今为止最好的,但需要企业版许可。如果 TDE 不可用,则必须删除部分搜索的要求,没有现实的方法来满足它。
SSN 的可能值不到 10 亿个,而且分布不均。如果有人要获取您的数据库的副本,那么对任何特定记录的暴力攻击都是很简单的。事实上,如果这个人的出生日期和状态在记录中是明文的,并且他们是在 2011 年之前出生的,那么自定义算法可以极大地减少可能的 SSN 的数量,从而使暴力攻击变得更加容易。
正如您所注意到的,一旦您加密了数据,如果不首先解密每条记录,您就无法搜索它的明文——这是一个不合理的昂贵操作。
我赞赏保护人们隐私的愿望,但您应该使用 TDE、BitLocker 或 EFS,而不是像这样加密单个字段。