2012-09-07 98 views
1

我想编写一个搜索过滤器,它可以帮助我检索用户所属的所有组。用于Microsoft AD的LDAP嵌套组过滤器

例如: 假设我正在检索用户A(它是组A的一部分)的条目。并且组A可以是B组和D组的一部分,而D组又可以是E组的一部分。

现在,我的搜索过滤器应该返回我MemberOf属性作为用户A所属的所有可能的组它是A,B,D,E组)。

任何有关如何搜索过滤器可以看起来像指针?

+0

我不确定我完全理解这个问题。如果读出DirectoryEntry的memberOf属性(本例中为用户),则应列出成员所属的所有组的DN,而不管该组所在目录结构中的哪个位置。 – Sinaesthetic

+0

Hi喜欢, 目前我们只使用顶级过滤器进行LDAP搜索。例如,假设我想为用户A提取memberOf,并说userA是memberOf Group A和Group B.然后,作为顶级搜索过滤器的一部分,我只能提取关于A组和B组的信息。但是,如果Group A和B组又是D组的一部分,因此UserA自动成为D组的一部分。我会错过这些信息。 –

回答

2

这应该做你在问什么。它将返回用户所属的每个组的FDNO,但是,这将查询组,而不是用户。作为示例,要查找“CN = John Smith,DC = MyDomain,DC = NET”所属的所有组,请将基础设置为组容器DN;如果组中没有“例如(OU = groupsOU,DC = MyDomain,DC = NET)并将范围映射到子树,并使用以下过滤器。

(构件:1.2.840.113556.1.4.1941:=(CN =约翰·史密斯,DC = MYDOMAIN,DC = NET))

-Jim

+0

谢谢吉姆。我只是想更好地理解这一点,并希望你能更清楚地了解这一点。 1.此解决方案是否适用于所有类型的AD服务器?这是支持所有类型的AD版本(无论是MS还是开放式IADP)? 2.我们提到SNMP OID(原谅我是无知的),但是 表示SNMP服务本身没有在AD服务器上启用,那么解决方案将工作吗? –

+0

有关此方法的更多信息,请访问:http://ddkonline.blogspot.co.uk/2010/05/how-to-recursively-get-group-membership.html/http://stackoverflow.com/questions/6195812/ldap-nested-group-membership – JohnLBevan

+0

1 - 适用于所有类型的MS目录。 2. OID用于可扩展匹配规则。 (http://ldapwiki.willeke.com/wiki/ExtensibleMatch) - (http://ldapwiki.willeke.com/wiki/OID),并且与SNMP无关。 – jwilleke

0

有一个属性在用户对象称为tokenGroups 。它是运行时由Active Directory计算的构造属性。它包括用户对象所属的所有组。

确保您的域具有全局编录并确保您使用Pre-Windows 2000 Compatible Access组的帐户。然后,确保tokenGroups被指定为返回的属性之一。在用户对象上执行基础范围搜索。

1

您可以使用adfind.exe(joeware)来解决此问题并使用此处所述的标准ldap过滤器。例如:

http://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx

组嵌套的规定是这样的:

(member:1.2.840.113556.1.4.1941:=cn=Jim Smith,ou=West,dc=Domain,dc=com) 

,如果你使用adfind时,那么就应该是这样的:

adfind -f "(member:1.2.840.113556.1.4.1941:=cn=Jim Smith,ou=West,dc=Domain,dc=com)" samaccountname -list 

如果您想要输出除samaccountname以外的输出,例如displayname或mail属性,只需添加到列表中。此外,如果您想要搜索多个用户,那么您可能希望使用包含所有用户的输入文件和一些脚本来提取每行以供adfind使用。