Active directory 为什么不在LDAP搜索筛选器中始终使用(objectClass=*)?

Active directory 为什么不在LDAP搜索筛选器中始终使用(objectClass=*)?,active-directory,ldap,ldap-query,Active Directory,Ldap,Ldap Query,我为Active Directory中的搜索用户创建了以下筛选器: (&(objectClass=*)(|(sAMAccountName=u)(userPrincipalName=u)) 可以创建更合格的过滤器: (&(objectClass=person)(|(sAMAccountName=u)(userPrincipalName=u)) 问题是为什么 使用指定的类人有什么好处 同一目录是否可能包含objectClass不是person但以下为真的(|(sAMAccou

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

(&(objectClass=*)(|(sAMAccountName=u)(userPrincipalName=u)) 
可以创建更合格的过滤器:

(&(objectClass=person)(|(sAMAccountName=u)(userPrincipalName=u)) 
问题是为什么

使用指定的类
有什么好处

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


在LDAP搜索筛选器中不总是使用
(objectClass=*)

这可能是通用LDAP服务的遗留问题,在该服务中,任何对象都可以共享具有相同值的相同属性,但属于不同的对象类

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

因此,您很可能只需要查询
(|(sAMAccountName=u)(userPrincipalName=u))

根本没有对象类过滤器

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


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

为什么?每个对象都有一个objectClass。测试它有什么意义?谢谢你的回答(+1)。我们不仅要支持Active Directory。我从您的回答和文章中了解到以下内容,您将予以批准:1)至少需要使用
(objectClass=*)
当前筛选器才能使用所有LDAP(例如SUN LDAP)。2) 带有
(objectClass=*)
当前筛选器的筛选器将为任何LDAP(而不仅仅是Active Directory)返回正确的结果。3) 使用
(objectClass=person)
相等筛选器可提高性能。是。但是,在编写LDAP客户端时,不能偏向于服务器。LDAP客户机应该使用符合LDAP标准的代码编写,编写时应该让编码人员不知道使用的是哪个品牌的LDAP服务器。否则会导致脆弱的代码,当服务器供应商更改时(当供应商更改服务器响应LDAP请求的方式时),这些代码可能必须更改。或者,编写代码时应尽可能隔离任何依赖服务器的代码。