全文搜索引擎和安全性

问题描述

我们有数百万个确实敏感文件(docx,pfd,xlsx等)由客户上传到我们的应用程序中。在我们的应用程序中,我们具有Sphinx,可在这些文档中进行全文搜索。流程如下:

  1. 通过应用表格上传
  2. 从文档中纯文本抓取器
  3. 将文档存储到加密的S3存储桶
  4. 将抓取的纯文本存储到MysqL DB
  5. MysqL DB纯文本到存储在SSD上的Sphinx索引的索引器

由于安全和性能问题,我们必须完全重建上述流程。 MysqL数据库中的纯文本是此解决方案中最大的“麻烦”,但是我们必须分析市场上任何可能的解决方案。文档的安全性和加密是业务的重中之重。此外,Sphinx本身的问题是每周一次。

任何在搜索引擎和文档解决方案中具有全文搜索经验的人-我很想听听您的意见。

解决方法

特别是使用狮身人面像,有XMLPipe(或TSVPipe)索引器方法。在这里,索引器而不是读取“数据库”,而是执行脚本并为输出建立索引。

因此,可以使用一个脚本来下载加密的数据,解密并通过管道输出内容。也就是说,解密后的数据永远不会直接“存储”。

或者可以使用mysql中的本机加密来做类似的事情 https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-encrypt 数据可以在数据库中加密,而在索引编制过程中只是“即时”解密。

还请注意,虽然实际上未对搜索索引进行加密,但它是一个“反向索引”,因此,从理论上说,仅从原始单词而不是原始格式的完整文档就可以重建单词。 如果您愿意在结果上牺牲一些准确性,那么也许可以启用无中断索引。这将意味着甚至无法重新构造文档。知道每个文档中的单词,但不知道实际顺序。

或者可以使用dict = crc,它不存储实际单词,仅存储单词的散列版本。这使得重建非常困难(但并非完全不可能)。正如计算彩虹表以重建文档一样。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...