我想编写一个LDAP查询,测试用户(sAMAccountName)是否是特定组的成员。是否可以这样做,以便我只获得0或1个结果记录?
我想我可以获取用户的所有组,并测试每个组是否匹配,但我想知道是否可以将其打包到一个LDAP表达式中。
有任何想法吗?
谢谢
我想编写一个LDAP查询,测试用户(sAMAccountName)是否是特定组的成员。是否可以这样做,以便我只获得0或1个结果记录?
我想我可以获取用户的所有组,并测试每个组是否匹配,但我想知道是否可以将其打包到一个LDAP表达式中。
有任何想法吗?
谢谢
(&(objectClass=user)(sAMAccountName=yourUserName)
(memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com))
如果您在LDAP服务器上运行此命令并获得结果,则您的用户“yourUserName”确实是“CN=YourGroup,OU=Users,DC=YourDomain,DC=com”组的成员。
请尝试并查看是否有效!
如果您使用C# / VB.Net和System.DirectoryServices,请使用以下代码片段:
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com");
DirectorySearcher srch = new DirectorySearcher(rootEntry);
srch.SearchScope = SearchScope.Subtree;
srch.Filter = "(&(objectClass=user)(sAMAccountName=yourusername)(memberOf=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))";
SearchResultCollection res = srch.FindAll();
if(res == null || res.Count <= 0) {
Console.WriteLine("This user is *NOT* member of that group");
} else {
Console.WriteLine("This user is INDEED a member of that group");
}
需要注意的是,这只会测试直接组成员资格,而不会测试在您的域中所谓的“主要组”(通常为“cn=Users”)中的成员资格。它不处理嵌套成员资格,例如 用户A是组A的成员,组A又是组B的成员 - 这个事实并没有在此处反映出用户A实际上也是组B的成员。
Marc
ldapsearch -h dc1.example.com -D user@example.com -w \? -b DC=example,DC=com -v "(&(objectClass=user)(memberof=CN=AIX-users,OU=AIX,DC=example,DC=com))"
。 - Wally我想在Marc的回答中再补充一点:memberOf属性不能包含通配符,因此您不能像"memberof=CN=SPS*"这样说,并期望它找到所有以"SPS"开头的组。
你需要将查询基础设置为所询问用户的DN,然后将筛选器设置为你想知道他们是否是成员的组的DN。要查看 jdoe 是否是 office 组的成员,则查询将类似于以下内容:
ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host '(memberof=cn=officegroup,dc=example,dc=local)'
如果你想查看他所属的所有组,请在搜索中仅请求'memberof'属性,如下所示:
ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host **memberof**