AD中ou:dn:=过滤失效的替代方案及与OpenLDAP差异原因咨询
问题解答
AD中筛选指定OU下所有对象的替代方法
由于你必须以根节点为基准DN,无法直接将搜索基准设为目标OU,可使用AD支持的LDAP扩展匹配规则实现递归筛选:
1. 匹配目标OU及其所有层级子对象(含子OU内的对象)
借助distinguishedName属性配合LDAP匹配规则OID 1.2.840.113556.1.4.804,该规则会递归检查对象的DN是否以目标OU为父节点:
(distinguishedName:1.2.840.113556.1.4.804:=<目标OU的完整DN>)
例如目标OU的完整DN是ou=Sales,dc=contoso,dc=com,过滤条件写为:
(distinguishedName:1.2.840.113556.1.4.804:=ou=Sales,dc=contoso,dc=com)
2. 仅匹配目标OU的直接下属对象(不含子OU内的对象)
如果不需要递归到子OU,可直接匹配对象DN的后缀:
(distinguishedName=*,<目标OU的完整DN>)
或者通过目标OU的parentGUID属性匹配(需先获取目标OU的GUID值):
(parentGUID=<目标OU的GUID>)
为何ou:dn:=OuName在OpenLDAP和AD中表现不同
- OpenLDAP的实现:
ou:dn:=是OpenLDAP自身扩展的虚拟属性匹配语法,它会解析每个对象的完整DN,递归检查是否包含指定的OU组件,因此能返回目标OU下的所有子对象。这属于OpenLDAP独有的非标准实现。 - Active Directory的实现:AD不支持这种虚拟属性语法,它会将
ou:dn:=OuName直接解析为匹配对象自身的ou属性(只有OU容器对象本身才拥有ou属性),因此只能返回目标OU本身,无法匹配其下的子对象。AD依赖自身定义的标准LDAP扩展规则(即上述OID形式的匹配规则)来实现递归查询逻辑。
内容的提问来源于stack exchange,提问作者Loic
相关产品推荐
相关产品推荐

