我为Active Directory中的搜索用户创建了以下过滤器:
(&(objectClass=*)(|(sAMAccountName=u)(userPrincipalName=u))
可以创建更合格的过滤器:
(&(objectClass=person)(|(sAMAccountName=u)(userPrincipalName=u))
问题是为什么?
使用指定的类person
有什么好处?
同一目录是否可能包含objectClass
不是person
的对象,但以下是真的(|(sAMAccountName=u)(userPrincipalName=u))
?
方式并不总是在LDAP搜索过滤器中使用(objectClass=*)
吗?
答案 0 :(得分:5)
(objectClass=*)
是一个当前过滤器,用于过滤掉没有填充objectClass
的对象...这是无,因为所有LDAP对象都至少有一个结构对象类,因此过滤器组件在第一次过滤是不必要的,甚至可能会减慢搜索速度,具体取决于服务器配置。
您问题中的第一个过滤器可能会导致服务器使用不必要的匹配规则进行比较。假设已在服务器上创建了objectClass相等的索引,则从性能角度来看,第二个过滤器是更好的过滤器。
答案 1 :(得分:1)
这可能是通用LDAP服务的延续,在原则上,任何对象都可以共享具有相同值的相同属性,但是具有不同的对象类。
但是,Active Directory有一个限制,即sAMAccountName在域中必须是唯一的,跨所有对象类。并且只有4个对象类应该具有该属性? (我认为用户,组,打印机和工作站)。
所以你很可能只是查询
(|(sAMAccountName=u)(userPrincipalName=u))
根本没有objectclass过滤器。