结果集中的数据安全性来自Elastic Search,Solr或

时间:2012-02-07 20:42:06

标签: solr elasticsearch

我需要为现有数据库添加全文搜索功能。当然,首先是Solr或Elastic Search。而我所遇到的阻碍点是 - 如何安全地显示从底层搜索引擎返回的结果(现在让我们考虑Solr或Elastic Search,但是也会赞赏任何其他解决方案或引擎)。

棘手的上下文是,例如,我在我的系统中要编制索引的个人档案记录。个人档案中的一个领域是 - 经理的反馈。通常在系统中,该字段仅对员工的直接经理和更高层次结构可见,即来自另一个分支的“经理”将无法看到该字段。但是,我希望通过全文搜索可以搜索该字段,但仅限实际可以看到它的人。

现在我查询Solr的'stupid'(即查询字符串)并返回N个文档。当将其返回给最终用户时,我将删除“经理的反馈”字段,因为最终用户不是特定人员的管理者 - 但是结果集中存在的文档已经是“愚蠢”人员的证据......

问题是 - 处理该用例的可行方法是什么?是否可以使用本土安全过滤器插入Solr / ES进行输出?

注意事项:

    由于上述情况,
  • 仅过滤掉字段不起作用
  • 过滤掉完整的文档因

    而无效
    1. 搜索引擎无法确定哪些字段匹配 - 因此无法按字段http://elasticsearch-users.115913.n3.nabble.com/Best-way-to-return-which-field-matched-td2713071.html
    2. 手动过滤结果集
    3. 即使这确实有效,从结果集中删除文档会破坏引擎返回的方面(例如部门匹配的数量) - 我必须手动重新计算方面,否则它们将与手动过滤的记录不匹配揭示我实际上不想向最终用户展示的内容

2 个答案:

答案 0 :(得分:1)

在Solr中,您可以创建multiValued个字段。在您的情况下,您可以使用它来存储组织结构的非规范化值。

在描述的场景中,您将创建多值字段ouId(组织单位ID)并存储员工的ouId和所有父ouId。换句话说,您将允许 ouIds保存到此字段中。

在搜索方案中,您将使用经理的ouId进行FilterQuery - fq参数过滤。

示例:

..&fq=ouId:12

其中 12 是所选经理的组织单位ID。

答案 1 :(得分:1)

这可能对您有所帮助https://github.com/salyh/elasticsearch-security-plugin它为弹性搜索添加了文档级安全性。

"目前,基于用户的身份验证和授权通过第三方库waffle(仅限Windows服务器)支持Kerberos / SPNEGO和NTLM。对于UNIX服务器,通过SPNEGO Valve中的tomcat构建支持Kerberos / SPNEGO(适用于任何Kerberos实现。对于授权,支持Active Directory和通用LDAP)。还支持PKI / SSL客户端证书身份验证(CLIENT-CERT方法)。无需客户端身份验证即可支持SSL / TLS。

您也可以在没有Kerberos / NTLM / PKI的情况下使用此插件,但只能使用基于主机的身份验证。

截至目前已实施两个安全模块:

Actionpathfilter:在粗粒度级别上限制针对Elasticsearch的操作,例如谁可以进行READ,WRITE甚至ADMIN rest api调用 文档级安全性(dls):限制文档级别的操作,例如允许谁查询文档中的哪些字段"