如何查询LDAP目录树中处于不同层级的两组用户?
解决LDAP查询特定OU下用户的问题
首先得指出你用的过滤器有问题——LDAP里不能直接把OU路径当作独立属性条件来写,因为OU=是用户distinguishedName(DN,即区分名)的一部分,并非单独的属性字段。咱们一步步把查询改对:
正确的查询逻辑
你要找的是位于两个指定OU下的用户,搜索基设为OU=Groups,DC=mycompany,DC=com,那过滤器需要匹配用户的DN是否包含目标OU的完整路径。
正确的过滤器写法
用distinguishedName属性结合通配符和逻辑或来构造:
(|(distinguishedName=*,OU=IT Dept,OU=Groups,DC=mycompany,DC=com)(distinguishedName=*,OU=XYZ Corp,OU=Temp Accounts,OU=Groups,DC=mycompany,DC=com))
简单解释:
distinguishedName=*,OU=XXX:表示匹配所有DN以,OU=XXX,...结尾的对象,也就是该OU及其下级容器里的所有用户(或其他对象)(|...):逻辑或运算符,只要满足其中一个条件的对象就会被返回
额外优化建议
- 如果只想返回用户对象(避免返回组、计算机等其他类型对象),可以在过滤器里加上对象类条件:
(&(objectClass=user)(|(distinguishedName=*,OU=IT Dept,OU=Groups,DC=mycompany,DC=com)(distinguishedName=*,OU=XYZ Corp,OU=Temp Accounts,OU=Groups,DC=mycompany,DC=com))) - 确认搜索范围:把搜索范围设为子树(Subtree),这样才会遍历
OU=Groups下的所有层级子OU。如果设为“一级(One Level)”,只会搜索GroupsOU直接下属的对象,不会深入到IT Dept或Temp Accounts这些子OU中。
为什么原过滤器无效?
LDAP过滤器的格式是(属性名=属性值),你写的(OU=IT Dept)相当于在找属性名为OU、值为IT Dept的对象,但实际上不存在单独的OU属性——OU是DN的组成部分,并非独立属性,所以这个条件永远匹配不到任何对象。
内容的提问来源于stack exchange,提问作者Mike Thomsen
相关产品推荐
相关产品推荐

