5.5. 关于链接属性
服务类动态提供条目的属性值,它们具有相同的值 的属性,如构建地址、后代代码或主要办公室号码。这些是共享属性值,它在单个模板条目中更新。
但是,通常情况下,不同条目之间需要有一种表达其之间的链接方式,但显示该关系的值(甚至可能是属性)。Red Hat Directory Server 提供了一种将指定属性链接在一起的方法,以便在一个条目中的一个属性被改变时,相关条目上的相应属性会被自动更新。第一个属性具有一个指向要更新的条目的 DN 值;第二个条目属性也具有 DN 值,它是第一个条目的 back-pointer。
例如,组条目在诸如
成员
的属性中列出其成员。在用户所属的组的用户条目中,可以指示其中的一个问题;这在 memberOf
属性中设置。memberOf
属性是通过 MemberOf 插件的 managed 属性。该插件轮询每个组条目,以针对其各自成员属性的更改。每当从组中添加或删除组成员时,对应的用户条目都会使用更改的 memberOf
属性进行更新。这样,成员
(和其他成员属性)和 memberOf
属性 链接。
MemberOf 插件仅限于单个实例,仅适用于一个(单一)组成员属性(一些其他行为对组(如处理嵌套组)是唯一的。另一个插件是 Linked Attributes 插件,允许多个插件的实例。每个实例配置一个属性,它由管理员手动维护(
linkType
)和一个属性,由插件(managedType
)自动维护。
图 5.6. 基本链接属性配置
注意
为了保持数据一致性,只有插件进程才会维护 managed 属性。考虑创建一个将限制任何受管属性的所有写入访问权限的 ACI。
一个 Linked Attribute Plug-in 实例可以限制为目录中的单个子树。这可允许对属性组合和受影响的条目进行更加灵活的自定义。如果没有设置范围,则插件对整个目录执行操作。
图 5.7. 限制链接的属性插件到特定子树
5.5.1. 链接属性的 schema 要求
managed 属性和链接的属性都必须在其属性定义中需要 Distinguished Name 语法。该插件通过从 link 属性拉取 DN 来识别要维护的条目,然后它会自动将原始条目 DN 分配为受管属性值。这意味着这两个属性都必须将 DN 用作值。
managed 属性必须是多值。用户可以是多个组的成员,可以是多个文档的作者,或者具有多个"查看"参考条目。如果 managed 属性是单值,则值不会被正确更新。因为很多标准元素是多值,所以这个问题并不是默认 schema 的大部分问题。但是,在使用自定义 schema 时,特别需要考虑。
图 5.8. 错误:使用单值链接的属性
5.5.2. 使用带有复制的链接属性
在简单的复制方案中(supplier-consumer),然后插件必须仅存在于供应商上,因为没有写入用户才可以在消费者中进行。
对于多supplier 复制,每个供应商必须具有自己的插件实例、所有配置相同的插件实例,并且管理的属性必须使用部分复制来排除在复制中。
图 5.9. 链接属性和复制
对一个供应商所做的任何更改都会自动触发插件,以管理对应目录条目上的值,因此数据可以在服务器间保持一致。但是,受管属性必须由插件实例维护,才能在链接条目之间保持一致。这意味着,受管属性值应完全由插件进程维护,而不是复制过程,即使在多层次复制环境中也是如此。