The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Фильтры для поиска в LDAP (ldap auth search filter)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ldap, auth, search, filter,  (найти похожие документы)
From: Roman Shramko <http://dormestmass.blogspot.com>; Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC) Subject: Фильтры для поиска в LDAP Оригинал: http://dormestmass.blogspot.com/2007/04/ldap.html Полное описание конструирования фильтров для поиска в дереве каталогов LDAPv3 можно найти в RFC 2254. Фильтр имеет формат префиксной нотации (или польской ?). Очень широко практикуется рекурсия. Итак. Тело фильтра должно быть заключено в скобки: "(" элемент_сравнения ")" Элементы сравнения конструируются так: * И - "&" список_фильтров * ИЛИ - "|" список_фильтров * НЕТ - "!" элемент * Элемент Список фильтров - это список из рекурсивно записанных фильтров. Элементы могут быть четырех типов: simple, present, substring и extensible. Элемент simple конструируется следующим образом: атрибут операция значение В значениях можно использовать символ "*", который заменяет любое количество символов. Операции, применяемые бывают следующими: равно ("="), приблизительно ("~="), больше (">=") и меньше ("<="). Например. Выбрать записи, у которых атрибут cn равен Roman Shramko: (cn=Roman Shramko) Записи, для которых атрибут cn не равен Roman Shramko: (!(cn=Roman Shramko) Записи, тип которых GroupOfUniqueNames(группа) и в которые входит RShramko (атрибут uniquemember): (&(ObjectClass=GroupOfUniqueNames)(uniquemember=uid=RShramko,ou=Employee,ou=Org, o=com)) Элемент present конструируется так: атрибут "=*" Этот элемент является подмножеством элементов simple. Данный элемент используется для отбора записей, у которых присутствует определённый атрибут. Это наиболее используемый тип элементов. Например. Отобрать группы (тип записи GroupOfUniqueNames) в которых имеются члены (атрибут uniquemember): (uniquemember=*) Элемент substring конструируется следующим образом: атрибут "=" начальное_значение "*" конечное_значение Этот тип элементов так же является подмножеством элементов типа simple и служит для отбора по подстрокам. Например, нам нужно отобрать пользователей, у которых имя (атрибут cn) начинается на R и заканчивается на ko: (cn=R*ko) Элемент extensible конструируется так: атрибут [:"dn"] [":" идентификатор_поиска ] ":=" значение либо так: атрибут [:"dn"] ":" идентификатор_поиска ":=" значение Идентификатор поиска (Matching Rule Identifier) описан в RFC 2251. A matching rule is a means of expressing how a server should compare an AssertionValue received in a search filter with an abstract data value. Честно говоря, я не нашёл в своей практической работе задач, для которых была бы необходима форма элементов extensible. Пример: (cn:1.2.3.4.5:=Fred Flintstone) (sn:dn:2.4.6.8.10:=Barney Rubble) (o:dn:=Ace Industry) (:dn:2.4.6.8.10:=Dino) Фильтр: (&(objectClass=group)(|(ou:dn:=Chicago)(ou:dn:=Miami))) найдет группы, у которых в DN компонент OU содержит либо Chicago, либо Miami.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, dma_k, 14:49, 20/02/2009 [ответить] [смотреть все]
  • +/
    Более подробно о extensible search написано тут:

    http://www.redhat.com/docs/manuals/dir-server/ag/8.0/Finding_Directory_Entrie

     
  • 2, somebody, 13:30, 11/09/2009 [ответить] [смотреть все]
  • +/
    Подскажите, знающие люди, как выбрать пользователей, входящих в определённую группу? Настроена аутентификация пользователей вот по этой инструкции: http://www.linux.com/archive/feature/114074?theme=print
    Пробую так: ldapsearch -H ldap://localhost/ -x -b "dc=example,dc=org" "(&(ObjectClass=posixAccount)(uid=memberUid,cn=TestGroup,ou=Group,dc=example,dc=org))" *
    Ничего не находит. Видать я не всё понимаю.
    Спасибо.
     
     
  • 3, dma_k, 19:55, 11/09/2009 [^] [ответить] [смотреть все]
  • +/
    > "(&(ObjectClass=posixAccount)(uid=memberUid,cn=TestGroup,ou=Group,dc=example,dc=org))"

    Ты не можешь матчить весь DN, как ты написал. Только его часть:

    (&(objectClass=posixAccount)(&(uid:dn:=memberUid)(cn:dn:=TestGroup)))  ...

    See http://confluence.atlassian.com/display/DEV/How+to+write+a+LDAP+search+filter

    Ну и семантически не совсем понятно... Ты хочешь найти запись с вот таким DN и класс у неё posixAccount?

    LDAP не позволяет одновременно и выдать тебе пользователя и проверить, что он в такой-то группе. AFAIK

     
     
  • 4, somebody, 18:44, 15/09/2009 [^] [ответить] [смотреть все]
  • +/
    > Ты хочешь найти запись с вот таким DN и класс у неё posixAccount?

    Я хочу найти всех пользователей, входящих в указанную группу. Это просто все пользователи:
    ldapsearch -H ldap://localhost/ -x -b "dc=example,dc=org"  "(&(objectClass=shadowAccount))" uid
    А хочется получить список пользователей, входящих в группу TestGroup.
    Честно говоря, возможно по своей неосведомлённости не понял как прописать, даже ознакомившись с сылкой :( ...

     
     
  • 5, dma_k, 00:05, 16/09/2009 [^] [ответить] [смотреть все]
  • +/
    >А хочется получить список пользователей, входящих в группу TestGroup.
    >Честно говоря, возможно по своей неосведомлённости не понял как прописать, даже ознакомившись
    >с сылкой :( ...

    Жаль... Смотрим ldiff пример posix-группы:

    dn: cn=TestGroup,ou=group,dc=mycompany,dc=com
    cn: TestGroup
    gidNumber: 500
    objectClass: posixGroup
    memberUid: user1
    memberUid: user2
    memberUid: user3

    Отсюда очевидно фильтр будет таким:

    (&(cn=TestGroup)(memberUid=user1)) и поиск нужно вести с base="ou=group,dc=mycompany,dc=com"

    Если что-то возвращается, значит пользователь user1 входит в группу TestGroup :) А если ничего не возвращается, значит, я где-то ошибся.

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor