LDAP исключает подраздел OU из поиска - PullRequest
2 голосов
/ 09 марта 2012

Скажите, если бы у меня была такая структура:

Как я могу исключить A и B2?

_users
|__A
|__B
   |__B1
   |__B2
   |__B3
|__C
|__D

ou = пользователи, dc = домен, dc = co, dc = uk;

Ответы [ 6 ]

6 голосов
/ 09 марта 2012

Поиск LDAP состоит из 4 элементов:

  1. Узел, с которого вы просите начать поиск (отличительное имя узла)
  2. Область поиска(base, onelevel, subtree)
  3. Фильтр поиска (например, (objectClass = user))
  4. Атрибуты, которые вы хотите получить.

В активном-Directory, не существует «естественного» способа исключить OU из рекурсивного поиска.Что касается LDAP, с теоретической точки зрения, он существует ExtensibleMatch , который разрешает то, что вы хотите сделать, но он не поддерживается в Active-Directory.

1 голос
/ 04 августа 2017

Мне нужно было легко исключить отключенных пользователей из результатов поиска ldap или чего-либо еще, что показывало бы эти учетные записи пользователей вместе с активированными (активными) учетными записями.Я отказал в доступе к контенту списка для OU «Disabled Users», который оставляет OU видимым, а содержимое - нет.В результате пользователи, скажем, связанные клиенты Mac, использующие приложение «Контакты», больше не будут видеть «призрачных» пользователей.

1 голос
/ 11 марта 2015

Я делаю что-то подобное.Сначала я использую поиск «objectclass = organizunit» с областью поиска, установленной на «OneLevel».Код выглядит примерно так:

DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=ChildDomain,DC=RootDomain")
        using (DirectorySearcher ds = new DirectorySearcher(oDE))
        {
            ds.PropertiesToLoad.Add("dn");
            ds.SearchScope = SearchScope.OneLevel;
            ds.Filter = "(objectClass=OrganizationalUnit)";
            ds.PageSize = 30;

Затем я использую цикл foreach для циклического просмотра результатов и сравниваю различающееся имя каждого результата с тем OU, который я исключаю.Если dn OU совпадает, я перехожу к следующему результату.Если нет, то я предпринимаю какие-то действия.

0 голосов
/ 24 апреля 2014

Возможно, я слишком упрощаю это, но не могли бы вы также просто отказать в доступе к списку / чтению OU, которые вы хотели бы исключить из запроса? Предполагая, что вы используете определенную учетную запись службы для выполнения поиска, это должно работать.

0 голосов
/ 10 сентября 2013

Единственный способ - установить специальный атрибут только для требуемого или нежелательного OU.Вы можете использовать атрибут pager для пользователя или физический объект для компьютера, так как они мало используются и их обычно "злоупотребляют" для решения подобных проблем (не забудьте подтвердить, что они действительно не используются илине!!).Затем можно выполнить поиск, отфильтровывая эти атрибуты, чтобы исключить эти OU, например: (&(objectclass=user)(!(pager=*)))

Конечно, это неэффективно, и правильным решением является переупорядочение структуры LDAP / AD в соответствии с потребностями.*

0 голосов
/ 09 марта 2012

Поскольку сервер каталогов несовместим (как отмечает JP, AD не поддерживает расширяемые фильтры соответствий и, следовательно, является несовместимым), если есть атрибуты со значениями, идентифицирующими записи как принадлежащие к A и B2, исключая тех, у кого есть фильтр поиска. Например, если записи подчиненный A имеет objectClass со значением in-A, ваш фильтр может исключить те, поиск, состоящий из базового объекта ou=users, dc=domain, dc=co, dc=uk, области действия whole subtree, фильтр (!(objectClass=in-A)) и список атрибутов, которые вы хотите. Подобный фильтр может быть создан для исключения записей из A и B2 одновременно.

Подробнее о поиске и поисковых фильтрах см. LDAP: мастеринг поиска. Фильтры .

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