3

我为 Active Directory 中的搜索用户创建了以下过滤器:

(&(objectClass=*)(|(sAMAccountName=u)(userPrincipalName=u)) 

可以创建更多合格的过滤器:

(&(objectClass=person)(|(sAMAccountName=u)(userPrincipalName=u)) 

问题是为什么?

使用指定类有什么好处person

同一个目录是否可能包含objectClass不是person但以下是真的对象(|(sAMAccountName=u)(userPrincipalName=u))

为什么不总是(objectClass=*)在 LDAP 搜索过滤器中使用?

4

2 回答 2

6

(objectClass=*)是一个现有的过滤器,用于过滤掉没有填充的对象objectClass......这是没有的,因为所有 LDAP 对象都至少有一个结构 objectClass,因此第一个过滤器中的过滤器组件是不必要的,甚至可能会减慢搜索速度,具体取决于关于服务器配置。

您问题中的第一个过滤器可能会导致服务器使用不必要的匹配规则进行比较。从性能的角度来看,第二个过滤器是一个更好的过滤器,假设已经在服务器上创建了 objectClass 相等性的索引。

于 2013-07-01T15:29:54.573 回答
1

它可能是通用 LDAP 服务的保留,原则上任何对象都可以共享具有相同值的相同属性,但属于不同的对象类。

但是,Active Directory 有一个限制,即 sAMAccountName 在域内必须是唯一的,在所有对象类中。并且只有 4 个对象类应该具有该属性?(我认为是用户、组、打印机和工作站)。

所以你很可能只是查询 (|(sAMAccountName=u)(userPrincipalName=u))

根本没有对象类过滤器。

于 2013-07-01T14:32:12.020 回答