我知道 LDAP 查询有限制,因此我设置了一个没有限制的用户。但即便如此,我还是遇到了“超出管理限制”的错误。
下面我摘录了数据库配置。我使用的用户是 cn=checkrepl,cn=users,dc=domain,dc=es。
esauro@ubuntu:~$ ldapsearch -x -W -D 'cn=admin,cn=config' -b 'cn=config' -h openldap1 'olcDatabase={1}hdb'
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: olcDatabase={1}hdb
# requesting: ALL
#
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=domain,dc=es
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
s auth by dn="cn=admin,dc=domain,dc=es" write by dn.subtree="cn=Managers,dc=domain,
dc=es" read by * none
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to * by self write by dn="cn=admin,dc=domain,dc=es" write by * read
olcLastMod: TRUE
olcLimits: {2}dn="cn=checkrepl,cn=Users,dc=domain,dc=es" time.soft=unlimited time
.hard=unlimited size.soft=unlimited size.hard=unlimited
olcSizeLimit: size=100000 size.unchecked=100000
olcMirrorMode: TRUE
olcMonitoring: TRUE
olcDbCacheSize: 200000
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 536870912 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
但是,每当我查询目录时,如果结果很大,我就会收到错误,无论我是否包含标志来限制查询的时间和大小。
esauro@ubuntu:~$ ldapsearch -z 40 -l 1000 -x -W -D 'cn=checkrepl,cn=users,dc=domain,dc=es' -b 'dc=domain,dc=es' -h openldap1 'uid=al*' dn
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=es> with scope subtree
# filter: uid=al*
# requesting: dn
#
# search result
search: 2
result: 11 Administrative limit exceeded
# numResponses: 1
我使用 ldap-utils(版本 2.4.23 和 2.4.28)作为客户端,使用 openldap(2.4.23)作为服务器
编辑:配置中的另一个摘录包括索引:
olcDbIndex: objectClass eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid,uniqueMember eq
olcDbIndex: uidNumber,gidNumber eq,pres
olcDbIndex: sambaSID,sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType,sambaSIDList eq
olcDbIndex: entryCSN,entryUUID eq
olcDbIndex: ou,cn eq
olcDbIndex: mail,maildrop eq
编辑2:此精确配置(复制和粘贴)在使用较新版本的 LDAP 的另一个 LDAP 中完美运行。
答案1
您有olcDbCacheSize: 200000
(和 512MB 缓存),这表明您可能有大量目录条目。
您size.unchecked=100000
对没有索引的属性的查询施加了限制。
您的配置[摘录]中没有olcDbIndex
属性,因此 可能没有可供搜索的索引。
如果条目数超过 100,000 个,则搜索将需要进行完整目录扫描,并且会超出其默认size.unchecked
限制,无论实际匹配的条目数有多少uid=al*
。
你真的需要索引。尝试使用 运行olcLoglevel: stats index
,并检查您的 syslog 配置以确保该设施(local4 是默认值)位于有用的地方。添加索引,包括至少您的常见查询、uid 的子(字符串)索引以及运行slapindex -v
更新slapd
不应该在索引生成期间运行。