如何将Active Directory LDAP查询过滤到包含经过身份验证/绑定的用户(或任何用户)的组?这很好用:
(&(objectClass=group)(member=*))
>>> lots of results
但我不能再详细说明了:
(&(objectClass=group)(member=*S*))
>>> nothing
MSDN提到使用这样的过滤器:
(member:1.2.840.113556.1.4.1941:=(cn=user1,cn=users,DC=x))
但是即使忽略了参与其中的疯狂超幻数,当我尝试用它过滤时,我总是得到0结果(甚至用我自己的distinguishedName替换cn=user1,cn=users,DC=x
,甚至替换它与*
)。
答案 0 :(得分:8)
您需要用户的完整DN,即
(&(member=CN=Your Name,OU=Your OU,DC=company,DC=com)(objectClass=group))
注意你不能在这个中使用*
答案 1 :(得分:4)
因此Search Filter Syntax解释了递归搜索中涉及的疯狂超幻数。
在一次搜索中(递归地)查找“user1”所属的所有组:
(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)
使用LDIFDE.EXE显示Windows Server中包含的命令行工具:
ldifde -f user1Grps.ldf -d "dc=societe,dc=local" -r "(member:1.2.840.113556.1.4.1941:=cn=user1,ou=Monou,dc=societe,dc=local)"
如果您在W2K8或W2K8 R2服务器上运行,请小心以管理员身份运行。
如果您使用C#编程,可以使用:
/* Retreiving a principal context
*/
Console.WriteLine("Retreiving a principal context");
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "PWD");
/* Look for all the groups a user belongs to
*/
UserPrincipal aUser = UserPrincipal.FindByIdentity(domainContext, "user1");
PrincipalSearchResult<Principal> a = aUser.GetAuthorizationGroups();
foreach (GroupPrincipal gTmp in a)
{
Console.WriteLine(gTmp.Name);
}