我需要为现有数据库添加全文搜索功能。当然,首先是Solr或Elastic Search。而我所遇到的阻碍点是 - 如何安全地显示从底层搜索引擎返回的结果(现在让我们考虑Solr或Elastic Search,但是也会赞赏任何其他解决方案或引擎)。
棘手的上下文是,例如,我在我的系统中要编制索引的个人档案记录。个人档案中的一个领域是 - 经理的反馈。通常在系统中,该字段仅对员工的直接经理和更高层次结构可见,即来自另一个分支的“经理”将无法看到该字段。但是,我希望通过全文搜索可以搜索该字段,但仅限实际可以看到它的人。
现在我查询Solr的'stupid'(即查询字符串)并返回N个文档。当将其返回给最终用户时,我将删除“经理的反馈”字段,因为最终用户不是特定人员的管理者 - 但是结果集中存在的文档已经是“愚蠢”人员的证据......
问题是 - 处理该用例的可行方法是什么?是否可以使用本土安全过滤器插入Solr / ES进行输出?
注意事项:
过滤掉完整的文档因
而无效答案 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):限制文档级别的操作,例如允许谁查询文档中的哪些字段"