LDAP:从搜索查询中排除域

时间:2015-02-23 10:22:23

标签: search active-directory ldap ldap-query dn

我试图从LDAP搜索中排除域控制器。

我有3个DC:staffstudentexams

所以我可以使用以下搜索DN:

  • DC=staff,DC=root,DC=mycompany,DC=fr
  • DC=student,DC=root,DC=mycompany,DC=fr
  • DC=exams,DC=root,DC=mycompany,DC=fr

然后搜索很简单:(&(objectCategory=person)(objectClass=user)(sAMAccountName=johndoe))

它有效,但一个人(sAMAccountName)可以在几个领域(即学生和考试),所以它被发现两次。我需要将搜索范围限制为仅 staffstudent

我尝试了以下查询,但是不起作用:

(&(objectCategory=person)(objectClass=user)(sAMAccountName=johndoe)(!(memberOf=DC=exams,DC=root,DC=mycompany,DC=fr)))

1 个答案:

答案 0 :(得分:2)

我认为你正在混淆你的DC和团体。 memberOf是Active Directory中的反向指针属性;它保留在用户对象上,但直接对应于用户所属的组。如果您实际上拥有与您的域相对应的组中的不同成员,则可以执行类似的操作。虽然看起来更像是......

(&
  (objectCategory=person)(objectClass=user)(sAMAccountName=johndoe)
  (!(memberOf=cn=exams_group,ou=groups,DC=exams,DC=root,DC=mycompany,DC=fr))
)

如果这看起来不适合您,请查看每个条目的userPrincipalName属性值。它们可能都有不同的扩展名。 userPrincipalName在整个林中保证唯一,通常采用电子邮件地址samaccountname@domainname的格式。如果跨域有重复的samaccountnames,则userprincipalname的域组件很可能会有所不同。

你可以这样做......有点粗糙但可能有效

(&
  (objectCategory=person)(objectClass=user)(sAMAccountName=johndoe)
  (!(userprincipalname=*@exams.root.mycompany.fr))
)

或者您只需提交多个肯定的搜索请求。