我有拉从OU在Active Directory用户信息的应用。 它需要的参数是用于搜索和过滤字符串基地。
我有一个OU我想拉从信息,但有一个子OU我想避免:
通缉
从用户OU=People,DC=mydomain,DC=com
没曾想
从用户的OU=Evil,OU=People,DC=mydomain,DC=com
我知道,这可能通过改写进行德进口停止搜索子OU的应用程序来完成,但有什么办法上搜索LDAP过滤器来做到这一点? 喜欢的东西( DistinguishedName !contains "Evil"
)或类似的,可以让我排除根据用户的路径上向用户,而不是用户的属性过滤。
如果您使用System.DirectoryServices
( .Protocols
在.NET),你可以设置SearchScope
到OneLevel
只有在人民-OU(无子OU中)进行搜索。 但是,如果您有任何这是行不通的OU=Good,OU=People,DC=mydomain,DC=com
...
第二个选择是查询人- OU的所有子OU:S( objectClass=organizationalUnit
),然后发出多个搜索请求; 一个用于它们中的每(除了“恶”之一)。
编辑:@geoffc -这将是非常难以实现。 默认情况下,所有通过身份验证的用户具有读取访问Active Directory中的所有对象。 只要设置在邪恶的OU“拒绝读取”不会做的伎俩,因为读取正确的身份验证的用户设置单独的用户对象(在这种情况下),因此拥有在OU设置拒绝ACL的优先级。 您将基本上必须设置在每个邪恶-OU对象的拒绝读取ACL和总是添加到目录确定新的对象会得到相同的拒绝设置权限。 你可以通过修改Active Directory架构,并删除了身份验证的用户权限,但将打破很多其他的事情(包括Exchange),而不是由微软支持。
AFAICT,这不能与Active Directory中的LDAP过滤器来完成。 许多其他的LDAP实现支持可扩展的匹配,但广告不。
(推荐含有过滤器的用户ou:dn:=Evil
)上或通配符distinguishedName
没有针对Active Directory测试。
下面将做的伎俩:
(&(objectClass=user)(!(distinguishedName:=%Evil%)))
我遇到了类似的问题,同时建立一个地址簿用于扫描到电子邮件。 我试过(&(objectClass=user)(!(distinguishedName:=*Evil*)))
但似乎有些MFP的不接受*
作为通配符,但他们接受%
据http://www.zytrax.com/books/ldap/apa/component.html ,有可能得到你想要使用的是什么LDAP组件的过滤器。 下面是会匹配你描述一个例子:
(&(objectClass=organizationalUnit)(!(ou:dn:=Evil)))
这符合谁拥有organizationUnit的对象类的所有对象,但拒绝任何其DN包含匹配OU =邪恶的一个组成部分。
该对象类organizationalUnit
和其后代inetOrgPerson
允许属性ou
存在于一个条目。 一个添加ou
与价值属性evil
下属的对象ou=evil
分支,包括断言(!(ou=evil))
的搜索过滤器来限制从候选列表中那些不包含属性响应ou
与价值evil
。 可替代地, LDAP断言控制可以在以相同的方式请求中使用,以确保包含一个请求ou
与值evil
不被处理。 专业品质的目录服务器是LDAP兼容支持这两种方法。