Openldap

openLDAP bdb_equality_candidates: (memberOf) 未編入索引

  • August 18, 2018

我已經通過 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

我還沒有找到解決此問題的解決方案…

我通過重新索引修復了這個警告:

systemctl stop slapd
rm /var/lib/ldap/alock
slapindex

chown -R ldap:ldap /var/lib/ldap/
systemctl start slapd

這只是一個警告,表示該特定搜尋結果的過濾器中使用的某些屬性未編入索引。

索引屬性是否有意義只能通過查看導致此警告的過濾器來確定。

在為具有較大結果集的屬性添加索引以獲取不同值時,您還可以顯著降低搜尋性能。

索引反模式的典型範例:

假設(uid=foobar)總是返回一個搜尋結果。

所以很明顯你索引屬性uid

index uid eq

現在使用稍微複雜一些的過濾器是很常見的,例如只搜尋“活躍”使用者:

(&(uid=foobar)(organizationalStatus=active))

如果你有很多匹配(organizationalStatus=active)的使用者,如果你只是一個索引,搜尋性能會明顯變差,因為這個未索引的警告!

原因是為每個索引屬性生成一個搜尋候選集,並且在第二步中,使用未索引的斷言過濾搜尋候選集。所以在上面的例子index uid eq中會產生一個搜尋候選集基數為 1,同時index uid,organizationalStatus eq會產生兩個搜尋候選集,uid仍然是基數 1,但organizationsStatus基數是 all

=> 不要添加索引只是為了擺脫警告而不分析使用的搜尋過濾器和搜尋候選集的可能大小!

引用自:https://unix.stackexchange.com/questions/451118