我在 Debian 上使用 OpenLDAP (slapd) v2.4.47。它在日志文件中以以下方式发出抱怨 ( /var/log/debug
)
slapd[1142]: conn=1508 op=4 SRCH base="cn=persons,cn=internal" scope=2 deref=0 filter="(&(objectClass=mozillaAbPersonAlpha)(|(cn=john*)(mail=john*)(sn=john*)))"
slapd[1142]: <= mdb_substring_candidates: (cn) not indexed
slapd[1142]: <= mdb_substring_candidates: (mail) not indexed
slapd[1142]: <= mdb_substring_candidates: (sn) not indexed
对应的数据库(/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
)配置为:
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq
olcDbIndex: cn,sn,mail,uid,sambaSID eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbIndex: sambaDomainName eq
...
此外,当我尝试在“有问题的”属性(例如cn
)上添加索引时,它会失败:
# ldapmodify -H ldapi:// -Y EXTERNAL <<EOM
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn eq
EOM
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)
additional info: duplicate index definition for attr "cn"
这样我尝试了所有cn
,,mail
都sn
出现了同样的错误,所以看来索引在这些属性上是活跃的。
那么为什么 OpenLDAP 会抱怨缺少索引呢?
PS:我只运行一个 OpenLDAP,因此绝对不会搞砸。
答案1
它抱怨您需要 SUBstring 索引,而不仅仅是相等索引。您可以使用“sub”关键字添加它们。例如:
olcDbIndex: cn,mail,sn sub,eq