Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 加密字段&;全文搜索,最佳方法?_Sql Server_Encryption_Full Text Search - Fatal编程技术网

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

Sql server 加密字段&;全文搜索,最佳方法?,sql-server,encryption,full-text-search,Sql Server,Encryption,Full Text Search,我有一些存储笔记和敏感信息的字段,我想在它们进入数据库之前对它们进行加密 现在,我使用SQL全文搜索来搜索这些字段。很明显,加密这些数据会影响我的搜索结果 加密这些字段但仍允许搜索的最佳方法是什么?没有支持加密索引的数据库,因此您必须牺牲一些安全性才能实现这一点 您可以在clear中索引部分数据,并从应用程序中查找真实数据。例如,如果您想要商店信用卡号。您可以有最后4位数字的索引。共享同一个最后4位数字的卡的数量是有限的,因此您可以对每个卡进行解密并检查整个数字。这并不容易。您所描述的内容很少在

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

现在,我使用SQL全文搜索来搜索这些字段。很明显,加密这些数据会影响我的搜索结果


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

没有支持加密索引的数据库,因此您必须牺牲一些安全性才能实现这一点


您可以在clear中索引部分数据,并从应用程序中查找真实数据。例如,如果您想要商店信用卡号。您可以有最后4位数字的索引。共享同一个最后4位数字的卡的数量是有限的,因此您可以对每个卡进行解密并检查整个数字。

这并不容易。您所描述的内容很少在商业数据库中实现,尽管在该领域有一些理论结果。我建议你去看看这方面的论文

以下是一些让您开始学习的参考资料:

  • 宋晓东、大卫·瓦格纳和阿德里安·佩里格
  • R.Brinkman、L.Feng、J.Doumen、P.H.Hartel和W.Jonke。加密数据中的高效树搜索。在
  • D波内,G渐强,R奥斯特罗夫斯基,G波斯
  • P高尔,J斯塔顿,B沃特斯
另一个选项是存储加密数据的soundex。然后,您可以搜索soundex值并在不解密数据的情况下接近它。

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

“Oracle Database 10g Release 2中的一项新功能让您可以做到这一点:您可以将列声明为加密列,而无需编写一行代码。当用户插入数据时,数据库会透明地加密数据并将其存储在列中。类似地,当用户选择列时,数据库会自动对其解密。由于所有这些都是透明的,不需要对应用程序代码进行任何更改,因此该功能有一个合适的名称:透明数据加密(Transparent Data Encryption,TDE)。”

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

更新:此处还有另一个选项:


对于MySQL数据库,这似乎非常昂贵。

我知道这是一个古老的答案,但SQL Server和Oracle现在都提供了(昂贵的)透明数据加密产品,基本上允许应用程序在不做任何更改的情况下搜索,但实际的静止数据是加密的。更多信息如下:

SQL Server:

甲骨文:

另请看本演示文稿:如何搜索加密数据-吴裕珍