#regex #ldap
#регулярное выражение #ldap
Вопрос:
есть ли способ, которым я мог бы выполнить поиск в LDAP, используя регулярное выражение для поля? Для поиска я использую ldapsearch или «Центр управления сервером системного каталога Sun Java».
Ответ №1:
Ответ — НЕТ, вы не можете. Почему?
Поскольку стандарт LDAP описывает LDAP-ПОИСК как функцию с 4 параметрами :
- Указание, с чего начать поиск, которое представляет собой различимое имя (DN)
- Атрибуты, которые вы хотите вернуть
- Глубина поиска (базовый, одноуровневый, поддерево)
- Фильтр.
Вас интересует фильтр.
Документация по синтаксису MSDN
За пределами синтаксиса
Вы должны понимать, что операторы между атрибутами и значениями и подстановочные знаки внутри значений взаимодействуют с правилами сопоставления, которые являются частью СХЕМЫ вашего каталога. В бывшем каталоге 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, поддерживает базовое сопоставление подстановочных знаков, но не регулярных выражений.