我在 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,所以我不能搞砸。
它抱怨您需要 SUBstring 索引,而不仅仅是相等索引。您可以使用“sub”关键字添加它们。例如: