Нет, вы не можете без выполнения нескольких запросов.
Если ваш сервер основан на AD , он может использовать атрибут memberOf
, и в этом случае вы можете получить группы пользователей в одном запросе. но без вложенных групп :
ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' memberOf
Было бы замечательно, если бы мы могли использовать расширяемое сопоставление в качестве запроса атрибута в запросе выше, используя memberof:1.2.840.113556.1.4.1941:
вместо memberOf
,но это не поддерживаемый атрибут, для которого вы можете получать значения при поиске групп, он может использоваться только для расширяемого соответствия в фильтре (см. LDAP_MATCHING_RULE_IN_CHAIN
) и специфичен для AD (не реализован вOpenLDAP).
С другой стороны, вы можете искать группы, используя фильтр member:1.2.840.113556.1.4.1941:
, но проблема именно в том, что в первую очередь требуется знание dn пользователя.
Может возникнуть идея запроса групп с фильтром, совпадающим с memberUid
с помощью имени пользователя или sAMAccountName
, но это зависит от того, поддерживаются ли эти атрибуты в вашем каталоге,и я почти уверен, что у вас не может быть расширяемого соответствия с этим, что означает, что этот фильтр не может соответствовать членству во вложенной группе.
Итак, в конце вам нужно использовать второй запрос, чтобы получить все пользовательские dn,и для каждого из них создайте запрос, который получит членство в группе этого пользователя, включая вложенные группы.