четверг, 31 мая 2012 г.

Поиск в каталоге

Основное предназначение сервера каталогов - хранить информацию. Для доступа к ней используется операция поиска, которую реализует утилита ldapsearch.

Для поиска из командной строки используется утилита ldapsearch, которая имеет следующий синтаксис:

ldapsearch [ -b base] [ -s scope ] [filter [ attributes ]]
где:

  • base - верхняя точка поиска в дереве объектов, указывается в командной строке или клиентском конфигурационном файле(обычно /etc/openldap/ldap.conf)
  • scope - область поиска и может принимать одно из следующих значений
    • base - поиск только объекта указанного в ключе base
    • one - поиск в объекте указанном в base и его прямых наследников первого уровня
    • sub - поиск любого уровня вложенности, начиная с верхушки определяемой base. Это поведение по умолчанию
  • filter - правило отбора записей по критериям. Это наиболее сложная для восприятия часть поиска из-за использования (прямой) польской нотации. Поисковый фильтр строится из группы сравнений, объединенных операторами логического И(&) и ИЛИ(|). Минимальный поисковый фильтр '*' который эквивалентен 'objectClass=*'
  • attributes - список атрибутов, которые будут показаны в результате поиска. По умолчанию показываются все пользовательские атрибуты. Для просмотра полного списка атрибутов необходимо использовать '+'

Формирование фильтра

Допустимые операции сравнения зависят от набора правил, прописанных в схеме для атрибута. По умолчанию допустимо только сравнение на равенство '=' с полным значением(с учетом регистра) или символом '*':

&(objectClass=organization)(o=Sample Corporation)

Если для атрибута определено правило EQUALITY семейства caseIgnore*, то в поисковом фильтре можно использовать значение в любом регистре. Поиск по подстроке требует указания  для атрибута правила SUBSTR семейства *SubstringsMatch. Тогда становится доступными следующие фильтры:

&(objectClass=organization)(o=Sample*)
&(objectClass=organization)(o=*Corporation)
&(objectClass=organization)(o=*e Corp*)

Для атрибутов с определенным правилом ORDERING  дополнительно доступны также операции сравнения больше(>) и меньше (<) и производные >=, <= .


Для поиска по критерию НЕ РАВНО применяется логический оператор НЕ (!) с обычным выражением равенства:



&(objectClass=organization)(!(o=Sample*))

Переопределение правил на лету

Если стандартные правила не позволяют осуществить нужный поиск, можно переопределить их прямо в поисковом запросе:

(cn:caseExactMatch:=Admin)

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

Комментариев нет:

Отправить комментарий