2

此 ldap 查询是即时的:

"Find all groups which user1 is not member"
(&
    (objectclass=groupOfNames)
    (!(member=cn=user1))
)

就像这个:

"Find these groups"
(&
    (objectclass=groupOfNames)
    (|(cn=group1) (cn=group2) (cn=group3) ...  )
)

但是,像这样组合它们会导致几分钟的处理!

"From these groups, find all which the user1 is not a member"
(&
    (objectclass=groupOfNames)
    (!(member=cn=user1))
    (|(cn=group1) (cn=group2) (cn=group3) ...  )
)

我不知道为什么 ldap 服务器在组合查询中阻塞。有什么想法可以做什么?

如果有帮助,服务器是 Novell eDirectory。

4

1 回答 1

1

奇怪的是需要几分钟才能得到结果。你有超过几百万个对象吗?

一种可能性可能是,搜索 1 仅在树的一个分区内查找,在另一个分区中搜索 2,然后两者结合起来显然会同时查看两者,这应该没问题,只要您询问的服务器至少读取这些分区上的副本。

另外,您能否尝试以下变体:

(&

  (&
    (objectclass=groupOfNames)(!(member=cn=user1))
  )

  (&
    (objectclass=groupOfNames)(|(cn=group1) (cn=group2) (cn=group3) ...  )
  )

)

它应该为您提供最初查询的答案,但方式有点简单。

如果这没有帮助,您应该在查询的服务器上执行 ndstrace 并查看他对查询所做的确切操作。

简而言之:

  1. 很明显:确保您的 NDS 是健康的(ndsrepair,TID 3564075 等等)
  2. 检查两个查询是否在同一个分区中
  3. 检查服务器是否至少有分区的只读副本
  4. 尝试按照建议修改查询
  5. 在查询时执行 ndstrace 以查看花费了这么长时间
于 2017-07-14T12:30:51.987 回答