LDAP查询:如何跨多个OU筛选AD中属于指定组的所有用户
LDAP跨OU查询AD用户最优方案
前置配置要求
单次跨OU查询的前提是先配置两个查询参数:
- 基础查询DN设置为根域:
DC=comp,DC=com - 搜索范围设置为子树(Subtree),允许遍历根域下所有层级的对象
原有查询失效原因
LDAP标准中distinguishedName(dn)属性仅支持精确匹配和后缀通配,不支持中间位置的通配符匹配,你使用的(dn=OU=users,ou=*,DC=comp,DC=com)不符合LDAP语法规范,因此返回空结果。
对应场景过滤方案
场景1:查询所有城市下OU=users内的全部用户
如果不需要按用户组过滤,仅需要拉取所有users OU下的用户,使用AD专属的祖先DN匹配规则即可,兼容所有2008 R2及以上版本的AD域服务:
(&(objectCategory=person)(objectClass=user)(1.2.840.113556.1.4.1941:=OU=users,DC=comp,DC=com))
其中OID1.2.840.113556.1.4.1941是AD提供的递归祖先匹配规则,会匹配所有父级路径中包含OU=users,DC=comp,DC=com的用户对象,不受上层city OU的名称限制。
场景2:查询属于指定用户组的全部用户(原始核心需求)
如果需要筛选出属于特定组的用户,直接使用memberOf属性匹配即可,会自动跨所有OU检索符合条件的用户:
- 不需要匹配嵌套组成员时使用:
(&(objectCategory=person)(objectClass=user)(memberOf=CN=你的指定组名,OU=group,OU=对应城市OU,DC=comp,DC=com))
- 需要匹配嵌套组(用户属于指定组的子组也命中)时使用递归匹配规则:
(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=你的指定组名,OU=group,OU=对应城市OU,DC=comp,DC=com))
你只需要把过滤器内的组DN替换为你实际要筛选的目标组的完整DN即可。
内容的提问来源于stack exchange,提问作者Durja
相关产品推荐
相关产品推荐

