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