对象类和对象类别

对象类的每个实例都有一个多值 objectClass 属性,该属性标识对象是实例的类,以及从中派生该类的所有结构或抽象超级类。 因此,用户对象的 objectClass 属性将标识 顶部人员organizationalPerson,以及 用户 类。 objectClass 属性不包括列表中的辅助类。 系统在创建对象实例时设置 objectClass 值,并且无法更改它。

对象类的每个实例还有一个 objectCategory 属性,该属性是一个单值属性,该属性包含对象是实例的类或其超级类之一的可分辨名称。 创建对象时,系统会将其 objectCategory 属性设置为其对象类的 defaultObjectCategory 属性指定的值。 无法更改对象的 objectCategory 属性。

有关详细信息,以及检索对象的 objectClass 属性的代码示例,请参阅 检索 objectClass 属性

重要

在 Windows Server 2008 之前,不会为 objectClass 属性编制索引。 这是因为它具有多个值,并且高度非唯一;也就是说,objectClass 属性的每个实例都包含 顶级 类。 这意味着索引非常大且无效。 若要查找给定类的对象,请使用 objectCategory 属性,该属性是单值和索引的。 有关在搜索筛选器中使用这些属性的详细信息,请参阅 确定查找内容

 

对于大多数类,defaultObjectCategory 是类的 classSchema 对象的可分辨名称。 例如,organizationUnit 类的 defaultObjectCategory 为“CN=Organization-Unit,CN=Schema,CN=Configuration,<DC=forestroot>”。 但是,某些类将另一个类称为其 defaultObjectCategory。 这允许查询轻松查找相关对象的组,即使它们属于不同的类也是如此。 例如,用户人员organizationalPerson联系人 类都标识其 defaultObjectCategory 属性中的 人员 类。 这样,搜索筛选器(如 objectCategory=person)即可使用单个查询查找所有这些类的实例。 对人员的查询非常常见,因此这是一个简单的优化。

如果从结构类创建子类,最佳做法是将新类的 defaultObjectCategory 值设置为同一个超级类的可分辨名称。 这样,标准 UI 就可以“查找”子类。