elasticsearch - 使用elasticsearch分离数据访问

标签 elasticsearch

我刚刚了解elasticsearch,我想知道它是否适合我的情况:

考虑建立一个系统,让公司(拥有多名员工)可以注册和管理其客户,并向其客户发送文档。

现在,我想让公司能够搜索他们的文档 - 但只能搜索他们自己的文档,而不是其他公司的文档。换句话说:如何分离这些公司的数据进行搜索?如何使用elasticsearch 来实现这一点?

这种分离是由elasticsearch自己处理的吗? IE。我的系统中的公司与 Elasticsearch 的相关用户之间存在一些映射。 或者这是由我的系统后端处理的? IE。后端以某种方式决定(如何?)仅显​​示该特定公司的搜索结果。因此,只有一个用户,即我的系统的后端,可以访问和过滤 Elasticsearch 的结果。但这明智吗?

我确信有大量关于此的信息。请给我一个提示,因为我不知道要搜索什么。例如,搜索 elasticsearch 身份验证/授权仅产生有关谁获得一般搜索系统访问权限的结果,而不是有关解决这种分离问题的模式。

提前致谢!

最佳答案

Elasticsearch 本身不支持授权和身份验证,您需要通过插件添加此功能,据我所知有两个。 Shield是官方的解决方案,它是X-Pack的一部分,如果你想使用它,你需要支付Elastic的费用。 SearchGuard是一个开源替代方案,您可以购买企业升级。 这两者都使您能够为不同用户定义细粒度的访问权限。您可能想要做的是为每个公司提供自己的文档索引,然后限制其用户只能读取/写入该索引。或者,如果您绝对希望所有文档都位于一个索引中,则还可以添加文档级别限制,以便每个人查询相同的索引,但只能获取为其公司返回的结果。根据您期望服务的公司数量,这可能更有意义,以免拥有太多索引和分片,但我怀疑每个公司都有一个索引是最好的方法。

如果没有这些插件,您将需要求助于 http 层上的某些东西,例如 nginx 反向代理,它根据 url 中包含的索引名称或其他内容过滤请求,但我强烈建议不要这样做,很多痛苦就在于此!

关于elasticsearch - 使用elasticsearch分离数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42556109/

相关文章:

linux - 无法在 Linux(SUSE)上运行 ElasticSearch-7.5.0

elasticsearch - 不使用内置标记过滤器的自定义标记生成器

python - 加入所有 PostgreSQL 表并制作一个 Python 字典

elasticsearch - Logstash-forwarder 作为 Windows 服务

elasticsearch - Elasticsearch路由键映射到相同分片的行为

logstash - 屏蔽许可证过期后使用Kibana

node.js - NodeJS 使用 Elasticsearch/Mongoosastic 不返回任何结果

elasticsearch - 在QueryBuilders中使用termQuery时,Elasticsearch返回零命中

java - ElasticSearch 段落内范围查询

scala - 如何使用 scala 客户端开始使用 Elastic Search