Назад | Перейти на главную страницу

Превышен административный лимит OpenLDAP

Я знаю, что в запросах 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 не должен выполняться во время генерации индекса.

http://www.openldap.org/doc/admin24/tuning.html