У меня есть база данных ldap, которая используется уже некоторое время. естественно он полон записей.
Недавно я пытался настроить индекс для uid, чтобы облегчить поиск, я добавил следующее в свой файл slapd.conf
include /etc/openldap/schema/core.schema
database bdb
suffix "dc=domain,dc=net"
directory /var/lib/ldap
index uid eq,pres
Затем я запустил slapindex
slapindex -f /etc/openldap/slapd.conf -b "dc=jhc,dc=net" uid
Но это, похоже, не помогло, я не знаю, было ли это часть правильная, но для достижения какого-либо прогресса единственное, что сработало, это добавление следующей строки в файл ldif базы данных в /etc/openldap/slapd.d/cn=config/
olcDbIndex: uid pres,eq
. Затем я снова запустил slapindex и начал LDAP. Поиск uid теперь намного быстрее, но не дает мне результата по записям, которые уже находятся в базе данных, отображаются только новые записи, когда я выполняю ldapsearch и фильтрую uid, для справки поиск приведен ниже, но я убрал детали мой сервер ldap
ldapsearch "cn=admin,dc=domain,dc=net" -b "cn=users,dc=domain,dc=net" "(uid=newuser)"
Чего мне не хватает, чтобы проиндексировать уже существующие записи?
Для всех, у кого возникла эта проблема, решение состоит в том, чтобы существенно перенести вашу БД и добавить новый атрибут индекса в файл config.ldif, для меня это было сделано путем запуска
slapcat -n 0 -l config.ldif
slapcat -n 2 -l data.ldif
Затем удалите файлы в /etc/openldap/ slapd.d и /usr/local/openldap/
Отредактируйте файл config.ldif и добавьте значение вашего индекса, если у вас есть другие значения индекса, просто скопируйте их для меня, это выглядело так
olcDbIndex uid eq
Последний шаг чтобы вернуть базу данных с двумя файлами ldif
slapadd -c -F /etc/openldap/slapd.d -n 0 -l config.ldif
slapadd -c -F /etc/openldap/slapd.d -n 2 -l data.ldif
Теперь вы сможете запустить ldap, убедитесь, что ваш пользователь ldap является владельцем папок openldap и их содержимого.