Я думаю, что вы путаетесь между группами и узлами.
Дерево каталогов
Каталог - это дерево, в котором каждый объект является узлом. Active-Directory является немного особенным, потому что только несколько объектов, таких как organizationalUnits
(OU), Domains
или Containers
, могут быть узлами, содержащими пользовательские объекты.
Таким образом, поиск в каталоге состоит из:
- Узел, с которого начинается поиск, который идентифицируется отличительным именем (DN)
- Атрибуты, которые вы хотите вернуть
- Глубина поиска (базовая, одноуровневая, поддерево)
- Фильтр.
Каждый объект в каталоге содержит атрибуты с именем и синтаксисом. Для некоторых атрибутов, таких как member
, memberOf
, manager
, managedBy
, Microsoft предоставляет специальный синтаксис под названием uniqueName
. Этот синтаксис предназначен для различающегося имени, но каталог обеспечивает некоторую относительную целостность для этих атрибутов. Это означает, что, например, если вы переместите объект в каталог, DN внутри этого атрибута сохранит свое значение. При перемещении пользователя атрибут member
в группах, к которым он принадлежит, настраивается автоматически.
Сейчас LDAP_MATCHING_RULE_IN_CHAIN
.
Когда пользователь X является членом группы A. DN пользователя X находится в атрибуте участника группы A, DN группы A находится в атрибуте memberOf пользователя X. Если группа A является членом группы B, пользователь X принадлежит группе B, но DN группы B НЕ находится в атрибуте memberOf пользователя X. Здесь вы можете использовать LDAP_MATCHING_RULE_IN_CHAIN
для поиска рекурсивной принадлежности к группам. Это специальный расширенный оператор сопоставления, который проходит цепочку предков в объектах вплоть до корня, пока не найдет совпадение.
Примером такого запроса в Microsoft является проверка того, является ли пользователь «user1» членом группы «group1». Вы должны установить базу для DN пользователя (cn = user1, cn = users, dc = x) и область для base и использовать следующий запрос.
(memberOf:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)
Точно так же, чтобы найти все группы, членом которых является «user1», установите для базы DN контейнера DN; например (OU = groupsOU, dc = x) и область действия для поддерева, и используйте следующий фильтр.
(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)
Так что LDAP_MATCHING_RULE_IN_CHAIN
не имеет ничего общего с узлом дерева каталогов.