【发布时间】:2010-11-16 18:25:20
【问题描述】:
我有一些存储笔记和敏感信息的字段,我想在它们进入数据库之前对其进行加密。
现在,我使用 SQL 全文搜索来搜索这些字段。显然,加密这些数据会导致我的搜索结果丢失。
加密这些字段但仍允许搜索的最佳方法是什么?
【问题讨论】:
标签: sql-server encryption full-text-search
我有一些存储笔记和敏感信息的字段,我想在它们进入数据库之前对其进行加密。
现在,我使用 SQL 全文搜索来搜索这些字段。显然,加密这些数据会导致我的搜索结果丢失。
加密这些字段但仍允许搜索的最佳方法是什么?
【问题讨论】:
标签: sql-server encryption full-text-search
这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去google scholar 并开始寻找有关该主题的论文。
以下是一些帮助您入门的参考资料:
【讨论】:
没有数据库支持加密索引,所以你必须牺牲一些安全性来实现这一点。
您可以清晰地索引部分数据并从您的应用程序中找到真实数据。例如,如果您想要存储信用卡号。您可以拥有最后 4 位的索引。共享相同最后 4 位数字的卡片数量有限,因此您可以解密每张卡片并检查整个数字。
【讨论】:
另一种选择是存储加密数据的 soundex。然后,您可以搜索 soundex 值并在不解密数据的情况下接近。
【讨论】:
Oracle 的 10g 第 2 版(或更高版本)可能支持此功能。来自他们的网站:
http://www.oracle.com/technology/oramag/oracle/05-sep/o55security.html
“Oracle 数据库 10g 第 2 版中的一个新特性让您可以做到这一点:您可以将列声明为已加密,而无需编写任何代码。当用户插入数据时,数据库会透明地对其进行加密并将其存储在列。同样,当用户选择该列时,数据库会自动对其进行解密。由于所有这些都是透明地完成的,无需对应用程序代码进行任何更改,因此该功能具有适当的名称:透明数据加密(TDE)。”
这个想法是没有人可以看到数据库中的明文,但选择语句可以正常工作。如果可以选择 Oracle,这可能有助于您进行搜索?
更新:这里还有另一个选项:
http://www.critotech.com/index.htm
对于 MySQL 数据库,但似乎相当昂贵。
【讨论】:
我知道这是一个旧答案,但 SQL Server 和 Oracle 现在都有(昂贵的)透明数据加密产品,它基本上允许您的应用程序无需更改即可搜索,但实际的静态数据是加密的。更多信息在这里:
SQL 服务器: 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
【讨论】: