LDAP查询中Base DN与Filter的困惑:为何两种写法结果不同?
LDAP查询问题解答:Base DN与过滤器的区别
这两种查询完全不等价,核心问题出在你对LDAP过滤器的作用逻辑理解有误:
第一个命令的正确逻辑
指定Base DN为OU=Company Users,OU=Users,OU=UK,OU=Helpdesk,DC=ad,DC=company,DC=com,意味着从该OU节点开始(默认递归遍历所有子节点),用(objectClass=user)筛选范围内的所有用户对象,所以能正常返回结果。
第二个命令的错误点
你把OU层级直接写到过滤器里,但OU=xxx并不是用户对象的自身属性——用户的distinguishedName(DN)字段会包含所在OU的路径,但LDAP过滤器是用来匹配对象自身携带的属性(比如cn、objectClass、mail等),而非对象的存放位置。(OU=Company Users)这类条件无法匹配任何用户属性,自然返回空结果。
根DN下查询指定OU用户的正确做法
如果要从根DN出发查询目标OU下的用户,有两种可行方式:
- 保留Base DN为目标OU,过滤器仅保留用户筛选条件(即回到第一个命令的逻辑);
- 使用LDAP匹配规则扩展,通过用户的DN路径进行匹配,Active Directory支持这种语法:
若要同时查询多个OU,可通过ldapsearch -b "DC=ad,DC=company,DC=com" '(&(objectClass=user)(distinguishedName:dn:subtree:=OU=Company Users,OU=Users,OU=UK,OU=Helpdesk,DC=ad,DC=company,DC=com))'(|...)组合多个DN匹配条件,比如:ldapsearch -b "DC=ad,DC=company,DC=com" '(&(objectClass=user)(|(distinguishedName:dn:subtree:=OU=Company Users,DC=ad,DC=company,DC=com)(distinguishedName:dn:subtree:=OU=External Users,DC=ad,DC=company,DC=com)))'
内容的提问来源于stack exchange,提问作者Gaspode
相关产品推荐
相关产品推荐

