Я знаю, что в запросах 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.
У тебя есть olcDbCacheSize: 200000
(и кэш 512 МБ), что указывает на то, что у вас может быть большое количество записей в каталоге.
У тебя есть size.unchecked=100000
который накладывает ограничения на запросы атрибутов без индексов.
Нет olcDbIndex
атрибуты в вашей конфигурации [extract], так что там являются может Индексов для поиска быть не должно.
Если у вас более 100 000 записей, вашему поисковому запросу потребуется полное сканирование каталога, и оно будет превышать значение по умолчанию. size.unchecked
ограничения, независимо от того, сколько на самом деле соответствует uid=al*
.
Вы действительно нужны индексы. Попробуйте бегать с olcLoglevel: stats index
и проверьте конфигурацию системного журнала, чтобы убедиться, что средство (по умолчанию local4) находится в каком-нибудь полезном месте. Добавьте индексы, в том числе по крайней мере ваши общие запросы и суб (строковые) индексы для uid и запустите slapindex -v
обновлять, slapd
не должен выполняться во время генерации индекса.