7.3. 链接属性以管理属性值
对于所有 具有相同 值的属性的条目,类服务会动态提供属性值,如构建地址、后代码或主办公室号码。这些是共享属性值,在单个模板条目中更新。
但是,通常情况下,不同条目之间需要有一种表达其之间的链接方式,但显示该关系的值(甚至可能是属性)。Red Hat Directory Server 提供了一种将指定属性链接在一起的方法,以便在一个条目中的一个属性被改变时,会自动更新相关条目上的对应属性。(链接和受管属性均具有 DN 值。link 属性的值包含要更新的插件条目的 DN;第二个条目的 managed 属性具有指向原始链接条目的 DN 值。
7.3.1. 关于链接属性
链接的属性插件允许插件的多个实例。每个实例配置一个属性,它由管理员手动维护(
linkType
),以及一个由插件自动维护的属性(managedType
)。
图 7.5. 基本链接的属性配置
注意
为了保持数据一致性,只有插件进程才会维护 managed 属性。考虑创建一个 ACI,以限制对任何受管属性的所有写入访问。有关设置 ACI 的详情,请查看 第 18.7.2 节 “添加 ACI”。
链接的属性插件实例可以限制为目录中的单个子树。这可允许对属性组合和受影响的条目进行更加灵活的自定义。如果没有设置范围,则插件将在整个目录中运行。
图 7.6. 将链接的属性插件限制为特定子树
在配置链接的属性插件实例时,需要某些配置:
- managed 属性和链接的属性都必须在其属性定义中需要 Distinguished Name 语法。链接的属性本质上是跨引用管理的,插件处理这些跨引用的方式是从属性值中提取条目的 DN。有关规划自定义架构元素的详情,请参考 第 12 章 管理目录架构。
- 每个链接的属性插件实例都必须是本地的,并且 所有受管 属性都必须禁止使用部分复制进行复制。在一个供应商上所做的任何更改都将自动触发插件,以管理对应目录条目上的值,因此数据可以在服务器间保持一致。但是,受管属性必须由插件实例维护,才能在链接条目之间保持一致。这意味着,受管属性值应仅由插件进程(而不是复制过程)单独维护,即使在多层次复制环境中也是如此。有关使用部分复制的详情,请参考 第 15.1.7 节 “使用 DNATactional Replication 复制子属性集”。
7.3.2. 查看链接属性插件语法
默认链接的属性插件条目是每个插件实例的容器条目,类似于下一部分中的密码语法插件或 DNA 插件。此容器条目下的每个条目都定义不同的 link-managed 属性对。
要创建新的链接属性对,请在容器条目下创建一个新的插件实例。需要定义两个基本链接属性插件实例:
- 由管理员手动管理的属性在
linkType
属性中 - 由插件在
managedType
属性中动态创建的属性 - (可选)将插件限制为目录树的特定部分的范围,在
linkScope
属性中
例 7.5. 链接的属性插件实例条目示例
dn: cn=Manager Link,cn=Linked Attributes,cn=plugins,cn=config objectClass: top objectClass: extensibleObject cn: Manager Link linkType: directReport managedType: manager linkScope: ou=people,dc=example,dc=com
有关可用于 Linked Attributes 插件实例的属性列表,请查看 Red Hat Directory Server 配置、命令和文件参考 中的相应部分。
7.3.3. 配置属性链接
- 如果还没有启用,请启用 Linked Attributes 插件。详情请查看 第 1.10.2 节 “启用和禁用插件”.f
- 创建插件实例。需要
--managed-type
和--link-type
参数。以下示例显示了使用 dsconf 创建的插件实例:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr config "Manager Link" add --link-type=directReport --managed-type=manager
- 重启实例:
# dsctl instance_name restart
7.3.4. 清理属性链接
受管链接的属性可以不同步。例如,链接的属性可以被导入或复制到服务器,但对应的 managed 属性不是,因为 link 属性没有正确配置。受管链接的属性对可以通过运行 dsconf 插件 link-attr fixup 命令或启动修复任务来解决。
Fixup 任务会删除任何在引用条目上没有对应的 link 属性(由管理员管理的受管属性)的受管属性(属性)。相反,如果条目中存在 link 属性,任务会添加任何缺少的受管属性。
7.3.4.1. 重新生成链接属性
dsconf 插件 linked-attr fixup 命令启动一个特殊任务,以重新生成目录条目上的所有 managed-link 属性对。在某些情况下,一个或多个可能会丢失。如果条目中存在 link 属性,任务会在 available 属性中跟踪跨引用的 DN,并在引用的条目上创建对应的配置的 managed 属性。如果存在没有对应的 link 属性的 managed 属性,则会删除 managed 属性值。
要修复插件整个范围的所有配置的 link 属性对,请以 Directory Manager 的身份运行命令:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr fixup
通过将基本 DN 传递给命令,也可以将修复任务限制为单个链接管理的属性对。例如:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr fixup "cn=Manager Link,cn=Linked Attributes,cn=plugins,cn=config"
7.3.4.2. 使用 ldapmodify 重新生成链接的属性
修复链接的属性是可通过特殊任务配置条目来管理的任务之一。任务条目在
dse.ldif
文件中的 cn=tasks 配置条目下发生,因此也可以使用 ldapmodify 添加条目来启动任务。任务完成后,条目会从目录中删除。
此任务与 dsconf plugin linked-attr fixup 命令自动创建的相同。
要启动链接的属性修复任务,请在 cn=fixup 链接的属性下添加一个条目cn=tasks,cn=config 条目。唯一的必需属性是特定任务的
cn
,但它还允许 ttl
属性设置超时周期。使用 ldapmodify :
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=example,cn=fixup linked attributes,cn=tasks,cn=config changetype: add cn:example ttl: 5
任务完成后,条目会从
dse.ldif
配置中删除,因此可以持续重复使用相同的任务条目。
配置、命令和文件参考包括了 cn=fixup 链接的属性 任务配置的详细信息。