LDAP исключает подгруппу из поиска

Скажем, если бы у меня была структура, подобная следующей:

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

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

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


person Codded    schedule 09.03.2012    source источник
comment
Мне помогает исключить путь disabledName с помощью объявления: serverfault.com/a/999758/4591.   -  person eckes    schedule 21.01.2020


Ответы (6)


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

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

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

person JPBlanc    schedule 09.03.2012

Я делаю нечто подобное. Сначала я использую поиск «objectclass=organizationalunit» с областью поиска, установленной на «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 совпадает, я перехожу к следующему результату. Если нет, то я приму меры.

person Greg    schedule 11.03.2015
comment
Делать что-то похожее на что? Как правило, ответы должны стоять отдельно, цитируя и ссылки на любые другие ответы или внешние ресурсы, которые они используют. - person Nathan Tuggy; 11.03.2015

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

person ramos1053    schedule 04.08.2017

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

Дополнительные сведения о поиске и поисковых фильтрах см. в разделе LDAP: освоение поисковых фильтров .

person Terry Gardner    schedule 09.03.2012

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

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

person higuita    schedule 10.09.2013

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

person condonate    schedule 24.04.2014