java - LDAP:使用过滤器避免 Active Directory 中的子 CN

标签 java active-directory ldap jndi

我正在尝试查询 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 的脚本将向您展示如何准确地满足您的需求(除非您想要用户,而不是计算机)。

http://blogs.technet.com/heyscriptingguy/archive/2004/12/07/how-can-i-return-a-list-of-all-my-computers-except-those-in-a-specified-ou.aspx

您可以查看的另一件事是充当 AD 代理的虚拟目录,它允许您在不接触 AD 的情况下配置过滤器和权限。

(主要是从 hyphen site 复制过来的)

关于java - LDAP:使用过滤器避免 Active Directory 中的子 CN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295092/

相关文章:

java - 帮助 Java 日历——它给出了一些奇怪的输出

Java:在不需要管理权限的情况下在哪里编写配置

Docker nginx proxy, open ldap and phpldapadmin - 无法通过nginx访问ldap admin

c# - 确定 Active Directory 搜索结果中用户的域

sharepoint - 如何在 InfoPath 表单中验证用户是否存在于 SharePoint 门户中?

java - 如何通过 LDAP SSL 启用连接池?

c# - 通过 C# .NET 获取没有父级的 AD 组

java - 为什么java regex模式错误出现在windows环境中而不是solaris环境中

java - 另一个类中的方法不能应用于给定类型

python - 部署到 Azure 应用服务后,Flask 与 Azure SQL 数据库的连接失败