首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使内部搜索引擎返回的结果符合内部web应用程序的本地权限

使内部搜索引擎返回的结果符合内部web应用程序的本地权限
EN

Software Engineering用户
提问于 2014-08-27 14:16:58
回答 3查看 438关注 0票数 0

我有一个ElasticSearch搜索引擎和一个内部web应用程序。在应用安全模型之前,搜索结果非常快。安全模型限制一些用户访问某些页面。我们有7种“类型”的页面。

我们目前的进程是:

  1. 搜索引擎查询所有记录
  2. 对于每种结果类型,我从允许用户访问的数据库中获取该类型的所有recordIds。这确保我只调用数据库最多7次(每种类型一次)。
  3. 我在用户可以访问的记录和正在返回的记录搜索之间做一个交互。

上述方法还不够快。我有一个自动提示搜索,每个查询现在最多需要2秒。

什么是使搜索引擎返回符合安全性的结果的典型方法?另一位开发人员建议我直接将安全权限存储在ElasticSearch本身中(本质上反映了我们的server所拥有的内容)。

编辑:每个记录都有一个页面。我们可以假设200-500名用户和25000+记录。

EN

回答 3

Software Engineering用户

发布于 2014-08-27 15:36:23

如果我理解正确的话,以前引擎的搜索结果是很快的。现在您可以这样做了,但是之后使用多达7个DB查询和交叉筛选来过滤结果。

显然,问题在于DB查询,或交叉排序和筛选!

下一个问题是-哪个是慢的?DB是一个慢速框吗?您是否对每个DB查询执行一次筛选?通常有很多方法来优化这类任务,在这种情况下,执行计划是您的朋友。

如果问题是DB,那么缓存可能是一个答案--如果安全策略是相对静态的,您可以获取筛选器限制一次,并在用户登录时将其保存到每个用户。如果在DB上过滤速度较慢,那么尝试在web服务器上应用筛选器,因为从原始结果中的每个页面都可以非常快地查找hashmap。

票数 1
EN

Software Engineering用户

发布于 2014-08-27 21:20:13

我不完全确定我是否理解正确,但我认为您可以将您的7个数据库访问减少到1。

  1. 将每个安全级别编码为整数中的位。用每条记录存储安全级别。
  2. 确定允许用户查看的安全级别--将其编码为类似的整数。
    1. 在搜索记录时,必须要求按位和这两个值的值为非零。

如果安全级别是严格分级的(例如,最高机密、秘密、机密、受限、非机密),则可以通过分配最高机密= 4、机密= 3、机密= 2、限制= 1、非机密= 0来进一步简化。将此记录存储为字段security_level

然后,具有机密权限的用户可以使用security_level <= 2等方式请求结果。

票数 1
EN

Software Engineering用户

发布于 2015-11-12 13:35:17

在搜索场景中实现安全性的一个实践是这样的。您将定义用户组,并使用这些组来定义对记录的访问。在构建用于搜索的索引时,包括索引中每个组的访问权限(基本上这是记录的ACL )。

然后,您应该有一个存储库,存储哪些用户是哪些组的成员。然后,您可以轻松地检索用户的群成员身份,例如在登录时。

在查询时,您将只在查询中包含组成员,以便它至少需要有一个用户是其成员的组。

在实践中,存储组成员的存储库往往更复杂,因为递归组成员身份。

概括地说:

  1. 与团体合作
  2. 有一个安全信息库
  3. 索引你的ACL
  4. 与用户组成员的查询

HTH。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/254597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档