我已经通过 slapd.conf 在 centos 上安装了一个带有 memberof 功能的 openldap 服务器:需要配置的一部分吗?:
index objectClass eq,pres
index ou,cn,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
在 openldap 日志中:
SRCH attr=uid displayName mail member
Jun 21 15:53:52 rhsfugt001 slapd[26924]: <= bdb_equality_candidates: (memberOf) not indexed
我还没有找到解决这个问题的解决方案...
答案1
这只是一个警告,表明该特定搜索结果的过滤器中使用的某些属性未建立索引。
索引属性是否有意义只能通过查看导致此警告的过滤器来确定。
您还可以显着地降低为具有不同值的大型结果集的属性添加索引时的搜索性能。
索引反模式的典型示例:
假设(uid=foobar)
始终返回一个搜索结果。
很明显你索引属性uid:
index uid eq
现在,使用稍微复杂的过滤器是很常见的,例如仅搜索“活跃”用户:
(&(uid=foobar)(organizationalStatus=active))
如果你有很多匹配的用户,(organizationalStatus=active)
如果你只是一个索引,那么搜索性能会明显更差,因为这个未索引的警告!
原因是,对于每个索引属性,都会生成一个搜索候选集,并且在第二步中,使用未索引的断言来过滤搜索候选集。所以在上面的例子中index uid eq
会产生一个搜索候选集基数为一,同时index uid,organizationalStatus eq
会产生两个搜索候选集,uid仍然基数为一,但是组织状态具有基数全部。
=> 不要只是为了消除警告而添加索引,而不分析所使用的搜索过滤器和搜索候选集的可能大小!
答案2
我通过重新索引修复了此警告:
systemctl stop slapd
rm /var/lib/ldap/alock
slapindex
chown -R ldap:ldap /var/lib/ldap/
systemctl start slapd