Поиск в LDAP с использованием регулярного выражения

#regex #ldap

#регулярное выражение #ldap

Вопрос:

есть ли способ, которым я мог бы выполнить поиск в LDAP, используя регулярное выражение для поля? Для поиска я использую ldapsearch или «Центр управления сервером системного каталога Sun Java».

Ответ №1:

Ответ — НЕТ, вы не можете. Почему?

Поскольку стандарт LDAP описывает LDAP-ПОИСК как функцию с 4 параметрами :

  1. Указание, с чего начать поиск, которое представляет собой различимое имя (DN)
  2. Атрибуты, которые вы хотите вернуть
  3. Глубина поиска (базовый, одноуровневый, поддерево)
  4. Фильтр.

Вас интересует фильтр.

Документация по синтаксису MSDN

Документация LDAP Explorer

За пределами синтаксиса

Вы должны понимать, что операторы между атрибутами и значениями и подстановочные знаки внутри значений взаимодействуют с правилами сопоставления, которые являются частью СХЕМЫ вашего каталога. В бывшем каталоге Sun (теперь oracle) каждый атрибут может быть настроен с помощью трех правил сопоставления (равенство, упорядочение, подстрока).

Ответ №2:

LDAP поддерживает поиск по «подстрокам», что не совсем то же самое, что подстановочные знаки. Примерами фильтров по подстрокам являются '(uid=abc*)' и '(mail='john@*.com')' и так далее.

Обычно разумно связаться с вашим администратором служб каталогов и запросить любые атрибуты, которые вы собираетесь использовать в фильтре для индексации при поиске по подстрокам. Профессиональные серверы LDAP поддерживают поиск по подстрокам, и для индексации результатов поиска может потребоваться указать минимальное количество символов. Например, если сервером является Sun Directory Server (Sun ONE, DSEE или SJS DS), перед '*' символом в фильтре требуется два символа, прежде чем индексы вступят в силу, например, '(mail=ab*)' могут использоваться индексы, тогда как '(mail=a*)' могут не использоваться индексы.

Ответ №3:

Протокол LDAP, аналогично SQL, поддерживает базовое сопоставление подстановочных знаков, но не регулярных выражений.