ActiveDirectory – LDAP查询objectCategory意外的结果

AD是在2003年的function级别,我们有些DC是运行Windows Server 2003,有些是2008年,有些是2008 R2。

使用以下查询时:

(objectCategory=user) 

我不指望在objectCategory属性等于“CN = Person,CN = Schema,CN = Configuration,DC = Contoso”时看到任何结果

我只期望objectCategory属性等于'CN = User,CN = Schema,CN = Configuration,DC = Contoso'的对象

但是,查询确实返回了objectCategory属性等于“CN = Person,CN = Schema,CN = Configuration,DC = Contoso”的所有对象

我的问题是这样的:为什么我看到我做的search结果? AD是否主动将包含(objectCategory=user)查询转换为(objectCategory=Person) ? 我已经查看了Person和User类的模式定义,但是在查看结果时我看不到任何理由。 我知道User类是organizationalPerson类的一个子类,它是Person的一个子类,但是我看不到可以解释这个翻译的属性值。

你得到这个人对象的原因是因为我们没有用户这样的类别。 用户是一个class级。 通过严格的定义,Objectcategory获得一个DN属性。 为了避免强制编码器查找模式DN,AD中的查询引擎允许您提供一个类并提供defaultObjectCategory作为扩展。 所以,如果你太查找用户的模式,你会得到这个作为defaultobjectcategory:

 CN=Person,CN=Schema,CN=Configuration,DC=jimbdom,DC=com 

search用户的正确expression式是:“(&(objectClass = user)(objectCategory = person))”。

用户从Personinheritance。 换句话说,用户是人员。 相反是不正确的。

所以如果你search用户,你也可以看到人。

来自Technet :

在这里输入图像说明