我正在尝试查询 Active Directory 中的几乎所有用户。 我的普通用户在不同的 OU 中,我想检索它们。但是我的系统用户存储在 Users CN 中,我不想检索它们。
看起来很像another question ,但他们的回答对我没有帮助。我正在使用提供的提示 here ,但它也无济于事。
我正在使用 JNDI 在 Active Directory 中进行查询。我的查询是:
(&(objectClass=user)(!(cn:dn:=Users)))
这意味着 user
类的所有对象,它们不在 Users
子树中。然而,此查询仍然会返回如下内容:
CN=__vmware__,CN=Users,DC=SIREDRM,DC=com
那么,为什么过滤器不起作用?我还能如何让它发挥作用?
最佳答案
With (!(distinguishedName=*,CN=Users= DC=mydomain,DC=com)), 你正在尝试使用具有 DN 语法 [Object(DS-DN)] 的属性,对于这些 LDAP 属性,你不能在 LDAP 过滤器中使用通配符。
属性“distinguishedName”: http://msdn.microsoft.com/en-us/library/ms675516%28VS.85%29.aspx
LDAP 语法“对象(DS-DN)” http://msdn.microsoft.com/en-us/library/ms684431%28VS.85%29.aspx
在第二个链接中,您会找到关于禁用通配符的声明。
通常,您可以使用 LDAP 可扩展匹配规则从子树搜索中排除某些容器,在您的情况下,语法类似于此
(!(cn:dn:=Users))
或类似的东西。坏处:AD 也不支持这些可扩展匹配: http://msdn.microsoft.com/en-us/library/cc223241%28PROT.10%29.aspx 阅读第一段。
因此结论是:您无法在 Activity 目录环境中使用一个过滤器来完成此操作。对不起。
唯一的解决方案似乎是使用客户端工具。来自 Microsoft 的脚本将向您展示如何准确地满足您的需求(除非您想要用户,而不是计算机)。
您可以查看的另一件事是充当 AD 代理的虚拟目录,它允许您在不接触 AD 的情况下配置过滤器和权限。
(主要是从 hyphen site 复制过来的)
关于java - LDAP:使用过滤器避免 Active Directory 中的子 CN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295092/