如何使用过滤器来避免Active Directory中的子OU?

DrS*_*ker 18 ldap active-directory

我有一个应用程序从Active Directory中的OU中提取用户信息.它所采用的参数是搜索的基础和过滤字符串.

我有一个OU我想从中提取信息,但是我想避免使用子OU:

通缉

用户来自 OU=People,DC=mydomain,DC=com

不想要

用户来自 OU=Evil,OU=People,DC=mydomain,DC=com

我知道这可以通过重写执行导入以停止搜索子OU的应用程序来完成,但有没有办法在搜索上使用LDAP过滤器?像(DistinguishedName !contains "Evil")或类似的东西,我会根据用户的路径排除用户,而不是过滤用户的属性.

Per*_*alt 12

如果您在.NET中使用System.DirectoryServices(.Protocols),则可以将SearchScopeto 设置OneLevel为仅在People-OU中搜索(并且没有子OU).但如果你有任何OU=Good,OU=People,DC=mydomain,DC=com...... 那就行不通

第二个选项是查询People-OU以查找所有子OU:s(objectClass=organizationalUnit),然后发出多个搜索请求; 每个人一个(除了"邪恶的").

编辑: @geoffc - 这将很难实现.默认情况下,所有经过身份验证的用户都可以读取Active Directory中的所有对象.只是在Evil OU上设置"拒绝读取"将不起作用,因为经过身份验证的用户的读取权限设置在单个用户对象上(在本例中),因此优先于OU上的拒绝ACL设置.您基本上必须在Evil-OU中的每个对象上设置拒绝读取ACL,并始终确保添加到目录的新对象获得相同的拒绝权限集.您可以编辑Active Directory架构并删除Authenticated Users的权限,但这将破坏许多其他内容(包括Exchange),并且不受Microsoft支持.

  • A for effort,但是通配符搜索不适用于`DN`类型的数据,特别是`distinguishedName`. (6认同)

小智 7

AFAICT,使用活动目录中的LDAP过滤器无法完成此操作。许多其他LDAP实现支持可扩展的匹配,但AD不支持。

推荐使用(ou:dn:=Evil)或通配符的筛选器的用户distinguishedName尚未针对Active Directory进行测试。


小智 6

以下将做到这一点:

(&(objectClass=user)(!(distinguishedName:=%Evil%)))
Run Code Online (Sandbox Code Playgroud)

我在构建扫描到电子邮件的地址簿时遇到了类似的问题.我试过,(&(objectClass=user)(!(distinguishedName:=*Evil*)))但似乎有些MFP不接受*通配符,但他们确实接受了%