加密字段&全文搜索,最佳方法?

时间:2009-08-04 17:41:58

标签: sql-server encryption full-text-search

我有一些字段存储笔记和敏感信息,我想在它进入数据库之前加密。

现在,我使用SQL全文搜索来搜索这些字段。显然加密这些数据会使我的搜索结果失效。

加密这些字段的最佳方法是什么,但仍允许搜索?

5 个答案:

答案 0 :(得分:9)

这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去google scholar并开始寻找有关这个问题的论文。

以下是一些可以帮助您入门的参考资料:

答案 1 :(得分:3)

没有数据库支持加密索引,因此您必须牺牲一些安全性来实现此目的。

您可以清除索引部分数据并从应用程序中查找实际数据。例如,如果您想要商店信用卡号。您可以拥有最后4位数的索引。共享相同的最后4位数的卡的数量是有限的,因此您可以负担解密每个卡并检查整数。

答案 2 :(得分:2)

另一种选择是存储加密数据的soundex。然后,您可以搜索soundex值并在不解密数据的情况下关闭。

答案 3 :(得分:1)

Oracle的10g第2版(或更高版本)可能支持此功能。从他们的网站:

http://www.oracle.com/technology/oramag/oracle/05-sep/o55security.html

“Oracle数据库10g第2版中的一项新功能允许您这样做:您可以将列声明为加密而无需编写任何代码。当用户插入数据时,数据库会透明地对其进行加密并将其存储在同样,当用户选择列时,数据库会自动对其进行解密。由于所有这些都是透明地完成而不对应用程序代码进行任何更改,因此该功能具有适当的名称:透明数据加密(TDE)。“

这个想法是没有人能看到数据库中的明文,但是select语句可以正常工作。如果Oracle是一个选项,这可能有助于您的搜索?

更新:此处还有另一种选择:

http://www.critotech.com/index.htm

对于MySQL数据库,但它似乎相当昂贵。

答案 4 :(得分:0)

我知道这是一个陈旧的答案,但SQL Server和Oracle现在都有(昂贵的)透明数据加密产品,它基本上允许您的应用程序无需更改进行搜索,但静态的实际数据是加密的。更多信息:

SQL Server: https://msdn.microsoft.com/en-us/library/bb934049%28v=sql.120%29.aspx

甲骨文: http://www.oracle.com/technetwork/database/options/advanced-security/index-099011.html