在单个查询中递归地查找给定 SAM 帐户的所有 AD 组
Find All AD groups recursively given SAM account in single query
是否可以根据用户的 SAM 帐户标识符递归检索所有 AD 组?
我一直在使用以下 ldapsearch
过滤器
ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(member:1.2.840.113556.1.4.1941:=CN=John Doe,OU=Users,OU=World,DC=domain,DC=local)' dn
查询我们的本地 LDAP 服务器(基于 AD)以检索用户的 AD 组,但这是一个两步过程,因为我需要用户的完整 DN。
以前我曾经通过非递归过滤器获取用户的直接组:
ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' dn
是否可以实现第一个查询的结果(递归所有 AD 组)和第二个查询的单个步骤(因为我只需要知道用户名的用户的电子邮件地址
不,你不能不执行多个查询。
如果您的服务器基于 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,并为每个用户构建查询以获取该用户的组成员资格,包括嵌套组。
是否可以根据用户的 SAM 帐户标识符递归检索所有 AD 组?
我一直在使用以下 ldapsearch
过滤器
ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(member:1.2.840.113556.1.4.1941:=CN=John Doe,OU=Users,OU=World,DC=domain,DC=local)' dn
查询我们的本地 LDAP 服务器(基于 AD)以检索用户的 AD 组,但这是一个两步过程,因为我需要用户的完整 DN。
以前我曾经通过非递归过滤器获取用户的直接组:
ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' dn
是否可以实现第一个查询的结果(递归所有 AD 组)和第二个查询的单个步骤(因为我只需要知道用户名的用户的电子邮件地址
不,你不能不执行多个查询。
如果您的服务器基于 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,并为每个用户构建查询以获取该用户的组成员资格,包括嵌套组。