5.3. 分配和管理唯一数字属性值


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

注意

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

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

5.3.1. 关于动态编号分配

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

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

5.3.1.1. 过滤、搜索和目标条目

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

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

重要

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

5.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 插件来添加此属性并为它生成唯一值。

5.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

例 5.4. 示例.DNA 和唯一银行帐户号

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

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

5.3.2. DNA 插件的语法

分布式数字分配(DNA)插件本身是一个容器条目,带有可分辨名称(DN) cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config。DNA 插件条目下的每个 DNA 条目为 DNA 插件定义一个新的受管范围。因此,要为 DNA 插件配置新的受管范围,请在容器条目下创建条目。例如,如果您希望插件管理条目中的 uidNumber 属性,请在其中定义范围和其他插件设置创建 cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config 配置条目。

插件语法因您在单一服务器上配置插件还是复制拓扑中的多个服务器配置插件而有所不同。

单个服务器的 DNA 插件语法

如果您在单一服务器上使用插件,则基本 DNA 配置条目会定义以下属性:

dnaType
定义插件管理的属性。
dnaScope
定义插件用作基础条目的条目(DN)来搜索条目。
dnaFilter
定义插件用来识别要管理的条目的搜索过滤器。
dnaNextValue
定义插件在创建条目后分配的下一个可用值。

以下是单个属性类型的单个服务器上的 DNA 配置条目示例:

dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=people,dc=example,dc=com
dnaNextValue: 1
Copy to Clipboard Toggle word wrap

复制拓扑中服务器的 DNA 插件语法

要在多个供应商上配置分布式数字分配,配置条目还必须包含以下信息来共享和传输范围:

dnaMaxValue
定义服务器可以分配的最大数量。
dnaThreshold
定义范围不足以触发范围传输的阈值。如果没有设置 dnaThreshold,则默认值为 1
dnaRangeRequestTimeout
定义服务器在请求范围传输时等待另一服务器的回答的超时周期。如果服务器在这个时间段内没有收到范围,则范围传输请求将发送到其他服务器。默认情况下,值设为 10 秒。
dnaSharedCfgDN
定义在所有供应商服务器上共享的配置条目 DN,该配置条目存储每个供应商的范围信息。
dnaNextRange
定义服务器分配给 manage 属性的特定数字范围。dnaNextRange 值显示传输的下一个可用范围,由插件自动管理,因为范围由服务器分配或使用。这个范围尚未分配给另一个服务器,并仍可供其本地目录服务器使用。

以下是复制拓扑中供应商上的 DNA 配置条目示例:

dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=people,dc=example,dc=com
dnanextvalue: 1
dnaMaxValue: 1300
dnasharedcfgdn: cn=Account UIDs,ou=ranges,dc=example,dc=com
dnathreshold: 100
dnaRangeRequestTimeout: 60
dnaNextRange: 1301-2301
Copy to Clipboard Toggle word wrap

有关您可以在 DNA 配置条目中使用的属性的完整列表,请参阅 分布式数字分配插件属性

如果没有配置 dnaNextRange 属性值,Directory 服务器将使用 dnaMaxValue 值作为下一个范围的上限来自动分配范围。如果您希望 Directory 服务器为其他服务器分配一个独立的特定范围,则必须明确设置 dnaNextRange 属性。

每个供应商都在单独的配置条目中保持其当前范围的跟踪,其中包含有关范围和连接设置的信息。此条目是 dnaSharedCfgDN 中的位置的子级。目录服务器将配置条目复制到所有其他供应商,因此每个供应商都可以检查配置以查找要联系新范围的服务器。例如:

dn: dnaHostname=ldap1.example.com+dnaPortNum=389,cn=Account UIDs,ou=Ranges,dc=example,dc=com
objectClass: dnaSharedConfig
objectClass: top
dnahostname: ldap1.example.com
dnaPortNum: 389
dnaSecurePortNum: 636
dnaRemainingValues: 1000
Copy to Clipboard Toggle word wrap

如果您希望供应商为受管属性分配唯一数字,请为您要应用的每个配置创建一个 DNA 插件配置条目。DNA 插件配置条目是 cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config 插件容器条目下的子条目。

在多层次环境中,每个供应商管理自己的值范围。范围在供应商和每个供应商之间复制,了解哪个供应商管理哪个范围。之后,如果第一个供应商没有范围值,供应商会使用此信息来请求来自其他供应商的范围传输。

以下示例使用 dsconf 工具在供应商上创建一个新的 DNA 插件配置条目。

先决条件

  • 您有 root 权限。

流程

  1. 在供应商中创建 DNA 配置条目:

    #  dsconf <instance_name> plugin dna config "Account UIDs" add --type uidNumber --filter "(objectclass=posixAccount)" --scope ou=People,dc=example,dc=com --next-value 1 --max-value 1300 --shared-config-entry "cn=Account UIDs,ou=Ranges,dc=example,dc=com" --threshold 100 --range-request-timeout 60 --magic-regen 99999
    
    Successfully created the cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
    Copy to Clipboard Toggle word wrap

    命令创建 DNA 插件配置,该配置将唯一值设置为 uidNumber 属性,而不是 ou=People,dc=example,dc=com 下新创建的 posixAccount 条目中的 99999 magic 值。当达到值 1200 时,供应商将值设置为 1300,并从第二个供应商请求范围传输。如果第二个供应商没有响应 60 秒,则第一个供应商请求从第三个供应商传输范围。

    注意

    如果您为没有复制或一层环境中的供应商创建配置条目,则仅设置 类型,--filter,--scope,--next-value 选项。

    有关 DNA 插件配置属性的详情,请参阅 DNA 插件部分的分布式数字分配插件 属性 和语法。

  2. 可选:创建在所有供应商服务器间共享的配置条目:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    dn: ou=Ranges,dc=example,dc=com
    changetype: add
    objectclass: top
    objectclass: extensibleObject
    objectclass: organizationalUnit
    ou: Ranges
    -
    dn: cn=Account UIDs,ou=Ranges,dc=example,dc=com
    changetype: add
    objectclass: top
    objectclass: extensibleObject
    cn: Account UIDs
    Copy to Clipboard Toggle word wrap
  3. 启用 DNA 插件:

    #  dsconf <instance_name> plugin dna enable
    
    Enabled plugin 'Distributed Numeric Assignment Plugin'
    Copy to Clipboard Toggle word wrap

验证

  • 查看配置条目详情:

    # dsconf <instance_name> plugin dna config "Account UIDs" show
    
    dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
    cn: Account UIDs
    dnaFilter: "(objectclass=posixAccount)"
    dnaInterval: 1
    dnaMagicRegen: 99999
    dnaMaxValue: 1300
    dnaNextValue: 1
    dnaRangeRequestTimeout: 60
    dnaScope: ou=People,dc=example,dc=com
    dnaSharedCfgDN: cn=Account UIDs,ou=Ranges,dc=example,dc=com
    dnaThreshold: 100
    dnaType: uidNumber
    objectClass: top
    objectClass: dnaPluginConfig
    Copy to Clipboard Toggle word wrap

如果您希望目录服务器为受管属性分配唯一数字,请为您要应用的每个配置创建一个 DNA 插件配置条目。目录服务器在 cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config 插件容器条目下存储此类插件配置条目。

在多层次环境中,每个供应商管理自己的值范围。范围在供应商和每个供应商之间复制,了解哪个供应商管理哪个范围。之后,如果第一个供应商没有范围值,供应商会使用此信息来请求来自其他供应商的范围传输。

先决条件

流程

  1. 选择 Directory Server 实例。
  2. 打开 Plugins 菜单,然后从列表中选择 DNA 插件。
  3. 单击 Add Config 按钮,以启动新插件配置条目的配置。
  4. DNA Configuration 选项卡中,设置字段。

    例如,您希望插件将唯一值设置为 uidNumber 属性,而不是 ou=People,dc=example,dc=com 下新创建的 posixAccount 条目中的 99999 magic 值。另外,您希望供应商将值设置为 1300,并在唯一值达到值 1200 时从第二个供应商请求范围传输。在这种情况下,设置以下字段:

    • 配置名称帐户 UID
    • DNA 管理的属性uidNumber
    • 过滤" (objectclass=posixAccount) "
    • 子树范围ou=People,dc=example,dc=com
    • 下一个值1
    • 最大值1300
    • ic Regeneration Value99999
    • 阈值100
    • 范围请求超时60

      注意
      如果您为没有复制或一层环境中的供应商创建配置条目,请只设置 DNA Managed AttributesFilter、subtreeScopeNext Value 字段。
  5. 前往 Shared Config Settings 选项卡,并将 Shared Config Entry DN 字段设置为,例如 cn=Account UIDs,ou=Ranges,dc=example,dc=com。此共享配置条目包含要联系范围传输的服务器的信息(如果当前服务器没有唯一的值)。
  6. 单击 Save Config 按钮,以保存插件设置。
  7. 将开关切换到 插件启用 位置以启用插件。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat