第 3 章 分配和管理唯一的数字属性值


有些条目属性值需要唯一的数字,如 uidNumbergidNumber。使用分布式数字分配(DNA)插件,您可以将目录服务器配置为自动从配置的数量生成并分配唯一数字到指定属性。

注意

DNA 插件不能保证 属性唯一性。如果您从插件管理的范围内手动分配了一个值,则插件不会检查该值是否是唯一的。

使用 DNA 插件,您可以通过为供应商上的不同本地 DNA 插件实例设置不同的范围来有效地避免复制冲突。例如,供应商 A 可以从 1 到 1000 分配数字,供应商 B 可将数字从 1001 分配给 2000。这样可确保每个供应商都使用真正唯一的数字集。

3.1. 关于动态数字分配

DNA 插件分配实例可以发布的可用数字范围。两个属性定义范围定义:服务器下一个可用数字(范围的 botton 值)及其最大值( 范围的上限)。在配置插件时,您可以设置初始底部值。之后,插件会更新这个底部值。

通过将可用数字分解为每个副本上的独立范围,服务器可以持续分配数字,而不会相互重叠。

3.1.1. 过滤器、搜索和目标条目

服务器在内部执行排序的搜索,以验证其他服务器是否已采用下一个指定范围,要求 managed 属性具有具有正确顺序匹配规则的平等索引。

DNA 插件始终应用到目录树的特定区域( 范围 )以及该子树中的特定条目类型( 过滤器)。

重要

DNA 插件 仅适用于单个 数据库,无法管理多个数据库的编号分配。DNA 插件使用 sort 控制来检查在 DNA 插件之外是否手动分配值。但是,这种验证使用 sort 控件仅适用于单个数据库。

3.1.2. 使用 dnaMagicRegen分配唯一数字

使用 magic 值(dnaMagicRegen)作为 DNA 插件管理的属性的模板值。这个魔法值是服务器范围之外的内容、数字甚至一个单词。当使用 magic 值添加条目且该条目位于 DNA 插件的配置范围和过滤器中时,magic 值会自动触发插件来生成新的唯一值。

例如,您可以使用 ldapmodify 工具将零(0)添加为一个 magic 值:

#  ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: posixAccount
uid: jsmith *cn: John Smith
uidNumber: 0
gidNumber: 0
Copy to Clipboard Toggle word wrap

使用配置的 dnaMagicRegen,DNA 插件只针对在添加条目时值等于 magic 值的属性生成唯一的值。如果您没有为 DNA 插件设置 magic 值,则插件会覆盖受管属性的任何值。

备注
在这种情形中,DNA 插件仅管理一个属性,并且添加的条目不包含 managed 属性,则 add 操作会触发 DNA 插件来添加此属性并为它生成唯一值。

3.1.3. 同一范围内的多个属性

DNA 插件可以从单个唯一数字中分配唯一数字到单个或多个属性类型。

这为为属性分配唯一数字的多个选项:

  • 来自唯一范围内的单个属性类型的单个数字。
  • 个条目中两个属性的唯一数字相同。
  • 分配了两个不同的属性,与相同范围的唯一数字不同。

在很多情况下,为每个属性类型分配唯一数字就足够了。例如,当将 employeeID 分配给新员工条目时,务必要确保每个员工条目收到唯一的 employeeID

但是,您可以将同一范围内的唯一数字分配给多个属性。例如,当将 uidNumbergidNumber 分配给 posixAccount 条目时,DNA 插件可以为这两个属性分配相同的数字。要做到这一点,将受管属性传递给修改操作,并使用 ldapmodify 工具指定 magic 值(0):

#  ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
-
add:gidNumber
gidNumber: 0
Copy to Clipboard Toggle word wrap

当 DNA 插件处理多个属性时,它只能在对象类只允许一个属性时为一个属性分配唯一的值。例如,posixGroup 对象类允许 gidNumber,但不能 uidNumber。如果 DNA 插件管理 uidNumber gidNumber ,它会在创建 posixGroup 条目时为 uidNumbergidNumber 属性范围分配一个唯一数字。为所有受管属性共享池可确保统一分配唯一数字,从而防止在不同条目上的 uidNumbergidNumber 冲突,与单独的范围相同。

如果 DNA 插件管理多个属性,它会在单个修改操作中为所有这些属性分配相同的值。但是,如果条目不允许为范围定义的每种属性,或者条目允许所有定义的属性类型,但只有属性的子集需要唯一值,您必须通过执行单独的修改操作来从同一范围分配 不同 数量。例如:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
idNumber: 0
^D

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: employeeId
employeeId: magic
Copy to Clipboard Toggle word wrap

例 3.1. 示例。DNA 和唯一银行客户号码

示例银行希望将相同的唯一数字用于客户的 primaryAccountcustomerID 属性。Example bank 管理员配置了 DNA 插件,为同一范围内的两个属性分配唯一的值。

此外,银行希望为来自客户 ID 和主要帐户编号的二级账户分配号,但这些数字不能与主要帐户号相同。Example bank 管理员配置 DNA 插件也会管理 secondaryAccount 属性,但仅在创建条目并分配 primaryAccountcustomerID 属性 后,将 secondaryAccount 属性添加到条目中。这可确保 primaryAccountcustomerID 共享相同的唯一数字,并且任何 secondAccount 号码都完全唯一,但仍来自同一范围的数字。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat