Как я могу найти ключ записи, начинающийся с 'a', используя LDAP.pm? - PullRequest
1 голос
/ 26 мая 2011

Я использую фильтр как (cn=${prefix}*), где $prefix = 'a';, но все равно он говорит, что найдено 0 записей.

В то время как при выполнении простого поиска без этого фильтра я нахожу много записей, начинающихся с 'a'.

Вот некоторая часть кода: - мой $ prefix = shift ();my $ result = $ ldap-> search (base => "$ ldapbase", scope => "sub", filter => "(objectclass = ) (cn = $ prefix )", attrs =>['*']) или умрите "дерево поиска ошибок: $ @ \ n";

my $ldapbase дает мне информацию обо всех сотрудниках, и я хочу только те, которые начинаются с 'a'.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Возможно, было бы разумно предупредить администратора LDAP о том, что вы собираетесь делать запросы, связанные с использованием подстрок.Администратор LDAP может индексировать CN для поиска по подстроке, поэтому поиск будет быстрее.Фильтр '(cn=a*)' является фильтром подстроки и должен возвращать все атрибуты CN из вашей поисковой базы «вниз» (в примере вы используете область поддерева), которые начинаются с букв «a» или «A» (возможно, CNтип DirectoryString и может не иметь чувствительности к регистру).

С практической точки зрения некоторым старым серверам каталогов требуется более одного символа перед символом подстроки '*' для работы индексов подстроки, например '(cn=ab*)' можетиспользуйте индексы на некоторых серверах, тогда как '(cn=a*)' может не использовать индексы.

В вашем примере кода вы указываете фильтр '(objectClass=)(cn=$prefix)', который не является допустимым фильтром поиска LDAP.Возможно, вы имели в виду '(&(objectClass=inetOrgPerson)(cn=${prefix}*))' (inetOrgPerson может быть другим классом объектов), и приведенный код является опечаткой.Если вам нужны только DN записей, которые начинаются с «a» или «A», вы можете запросить «специальный» атрибут «1.1», таким образом, только DN записи и никакие атрибуты не возвращаются.

0 голосов
/ 16 января 2019

Когда мы обнаруживаем, что наши клиенты ищут CN, которые часто начинаются с символа, следующий поиск, который мы видим по ним, касается CN, начинающихся с aa.Еще до того, как у нас было так много пользователей, следующий поиск был бы для CN, которые начинаются с b.

Если вы действительно хотите просмотреть все записи в базе данных, вероятно, есть лучший способ сделать это,Возможно, вы захотите поговорить со своими администраторами LDAP, возможно, у них есть лучший способ предложить.Серверы LDAP, как правило, предназначены для выполнения поиска, который находит небольшое подмножество записей, и хотя они обрабатывают запросы с большими наборами результатов в порядке, в зависимости от точного программного обеспечения сервера, они могут обрабатывать его не очень хорошо.* Существует также вопрос, действительно ли это то, чем вы хотите заниматься.В большинстве случаев наши пользователи хотят получить все наши записи, потому что они являются администраторами некоторого приложения, которое хочет иметь все пользовательские данные в своей собственной базе данных.

Иногда эти приложения можно настроитьЧтобы использовать внешний LDAP в режиме наложения, их просто необходимо настроить для этого.В каждом случае меня просили помочь в подобной ситуации, в документации приложения прямо говорилось, что он может это сделать, но это просто не в том смысле, в котором администратор приложения признавал это.

БольшинствоВ то же время пользовательская база приложения намного меньше, чем вся компания, и они пытаются привлечь всех пользователей компании, когда им действительно нужно менее 1%.Возможность запрашивать что-то еще, что просто выбирает желаемых пользователей, например, (departmentnumber=7159), обычно работает гораздо более оптимально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...