5.3. 关于服务类
服务类服务 (CoS)在对应用程序不可见的条目间共享属性。使用 CoS 时,可能不能使用条目本身存储一些属性值。相反,它们将由服务逻辑类生成,因为该条目将发送到客户端应用程序。
例如,该目录包含数千个条目,它们共享了通用属性
facsimileTelephoneNumber
。传统上,修改传真号需要单独更新每个项,这可能会是一个非常大型的任务,并可能造成没有全部更改的风险。使用 CoS 时,可以动态生成属性值。facsimileTelephoneNumber
属性存储在一个位置,每个条目都从该位置检索其 fax number 属性。对于应用程序,这些属性看起来像所有其他属性一样,尽管实际存储在条目本身上。
每个 CoS 都由目录中的几个条目组成:
CoS 定义条目和模板条目交互为目标条目(其范围内的条目)提供属性值。它们提供的值取决于以下内容:
- 条目的 DN(目录树中的不同部分可能包含不同的 CoS)。
- 通过该条目存储的服务类属性值。缺少 service class 属性可以表示特定的默认 CoS。
- 存储在 CoS 模板条目中的属性值。每个 CoS 模板条目提供特定 CoS 的属性值。
- 条目的对象类。只有条目包含对象类时,才会生成 COS 属性值,允许启用架构检查时属性;否则,将生成所有属性值。
- 存储在目录树中某个特定条目的属性。
重要
不要索引您在 CoS 定义中使用的属性(
cosAttribute
参数)。
注意
角色和经典 CoS 一起提供基于角色的属性。这些属性会出现在条目上,因为它具有关联 CoS 模板的特定角色。例如,使用基于角色的属性来基于角色设置服务器查找限制。
5.3.1. 关于 Pointer CoS
指针 CoS 仅使用模板 DN 识别模板条目。每个指针的 CoS 只能有一个模板 DN。pointer CoS 适用于模板条目范围内的所有条目。
例如,图 5.1 “Pointer CoS 示例” 中的指针 CoS 共享一个通用邮政代码,其中包含存储在 dc=example,dc=com 下的所有条目。
图 5.1. Pointer CoS 示例
![Pointer CoS 示例](https://access.redhat.com/webassets/avalon/d/Red_Hat_Directory_Server-11-Deployment_Guide-zh-CN/images/e8dee8a93a41d02fad0c2b4ad8ed1e52/cos1.png)
模板条目由 CoS 定义条目的 DN cn=exampleUS,cn=data 标识。每次在条目 cn=wholiday,ou=people,dc=example,dc=com 上查询
postalCode
属性时,Directory 服务器都会返回模板条目 cn=exampleUS,cn=data 中可用值。
5.3.2. 关于Indirect CoS
间接 CoS 使用目标条目属性之一的值来识别模板条目。target 条目的属性必须包含现有条目的 DN。
图 5.2. Indirect CoS 示例
![Indirect CoS 示例](https://access.redhat.com/webassets/avalon/d/Red_Hat_Directory_Server-11-Deployment_Guide-zh-CN/images/b8f946dce3f2cda06072d4f6502fe384/cos2.png)
在本例中,William Holiday 的目标条目包含
manager
属性的间接指定符。William 的经理是 Carla Fuentes,因此 manager
属性包含模板条目的 DN 的指针 cn=Carla Fuentes,ou=people,dc=example,dc=com。模板条目依次提供 departmentNumber
属性值 318842。
5.3.3. 关于经典 CoS
典型的 CoS 通过其 DN 和其中一个目标条目的属性来识别模板条目。经典的 CoS 可以有多个模板条目,包括要应用到不属于任何其他 CoS 模板的条目。
图 5.3. Classic CoS 示例
![Classic CoS 示例](https://access.redhat.com/webassets/avalon/d/Red_Hat_Directory_Server-11-Deployment_Guide-zh-CN/images/ebc5108c7f13df8099f649b59c5ebe9f/cos3.png)
在本例中,CoS 定义条目的
cosSpecifier
属性指定 employeeType
属性。此属性与模板 DN 相结合,将模板条目标识为 cn=sales,cn=exampleUS,cn=data。然后,模板条目为目标条目提供 postalCode
属性的值。