5.4. 强制属性唯一


为确保属性的值在整个目录或子树中是唯一的,您可以使用 Attribute Uniqueness 插件,该插件默认为禁用。

您可以将插件配置为验证以下任何一个属性的唯一性:

  • 设置子树列表,其中插件必须使用 uniqueness-subtrees 参数检查属性唯一性,例如:

    uniqueness-attribute-name: mail
    uniqueness-subtrees: ou=accounting,dc=example,dc=com
    uniqueness-subtrees: ou=sales,dc=example,dc=com
    uniqueness-across-all-subtrees: on
    uniqueness-exclude-subtrees: ou=private,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    如需了解更多详细信息,请参阅配置通过子树的属性插件

  • 使用 uniqueness-top-entry-oc 参数设置父条目对象类。如果更新条目的父条目包含此对象类,则插件会检查父条目子树下属性的唯一性。例如,您可以使用以下方法配置插件:

    uniqueness-attribute-name: mail
    uniqueness-top-entry-oc: nsContainer
    uniqueness-subtree-entries-oc: inetOrgPerson
    uniqueness-exclude-subtrees: ou=private,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    如需了解更多详细信息 ,请参阅通过对象类配置属性插件

您可以创建插件的多个配置条目以应用不同的条件。目录服务器在 cn=plugins,cn=config 下存储插件的所有配置条目。

5.4.1. 使用命令行配置属性唯一插件

您可以使用 dsconf 工具来设置子树列表,其中插件必须检查属性的唯一性。子树可以是目录中的任何条目,包括后缀。

使用以下示例流程配置插件,以验证 ou=sales,dc=example,dc=comou=accounting,dc=example,dc=com 子树下的 mail 属性的唯一性。

先决条件

  • 有目录管理器权限。

流程

  1. 创建新的插件配置条目:

    # dsconf <instance_name> plugin attr-uniq add "Mail Uniqueness" --attr-name mail --subtree ou=sales,dc=example,dc=com ou=accounting,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    命令创建 cn=Mail Uniqueness,cn=plugins,cn=config 配置条目。

    注意

    您可以设置插件来验证一个配置条目中多个属性的唯一性。

  2. 可选:在此插件配置条目中配置的所有子树中配置唯一性:

    # dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --across-all-subtrees on
    Copy to Clipboard Toggle word wrap

    命令在 ,将 uniqueness-across-all-subtrees 插件配置参数设置为。因此,插件会检查 ou=sales,dc=example,dc=comou=accounting,dc=example,dc=com 子树中的 mail 属性的唯一性。默认情况下,插件只检查创建或更新条目的子树中的唯一性,这意味着如果您创建或更新 ou=sales,dc=example,dc=com 下的条目,插件只会检查这个子树中的 mail 属性的唯一性。

  3. 可选:设置插件必须从属性唯一验证中排除的子树。

    例如,如果您希望插件跳过 ou=internal,ou=sales,dc=example,dc=com 子树,您可以使用 ldapmodify 工具来设置 uniqueness-exclude-subtrees 参数:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=Mail Uniqueness,cn=plugins,cn=config
    changetype: modify
    add: uniqueness-exclude-subtrees
    uniqueness-exclude-subtrees: ou=internal,ou=sales,dc=example,dc=com
    Copy to Clipboard Toggle word wrap
  4. 可选:如果您只验证包含特定对象类的条目中的唯一插件,请将此对象类设置为 uniqueness-subtree-entries-oc 参数的值。

    例如,您希望 mail 属性仅在包含 inetOrgPerson 对象类的条目中唯一,请输入:

    # dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --subtree-entries-oc=inetOrgPerson
    Copy to Clipboard Toggle word wrap
  5. 在服务器上启用插件:

    # dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness"
    Copy to Clipboard Toggle word wrap
  6. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

验证

  • 查看配置条目详情:

    # dsconf <instance_name> plugin attr-uniq show "Mail Uniqueness"
    
    dn: cn=Mail Uniqueness,cn=plugins,cn=config
    cn: Mail Uniqueness
    nsslapd-plugin-depends-on-type: database
    nsslapd-pluginDescription: Enforce unique attribute values
    nsslapd-pluginEnabled: on
    ...
    uniqueness-across-all-subtrees: on
    uniqueness-attribute-name: mail
    uniqueness-exclude-subtrees: ou=internal,ou=sales,dc=example,dc=com
    uniqueness-subtree-entries-oc: inetOrgPerson
    uniqueness-subtrees: ou=accounting,dc=example,dc=com
    uniqueness-subtrees: ou=sales,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

5.4.2. 通过对象类配置属性唯一插件

您可以配置 Attribute Uniqueness 插件,以确保属性的值在包含特定对象类的条目中是唯一的。要配置插件,您必须设置以下配置参数:

  • uniqueness-top-entry-oc.此参数唯一标识插件验证属性唯一性的子树。该插件仅在这些父条目中的条目中验证唯一性,其中包含您在 uniqueness-top-entry-oc 中设置的特定对象类。如果目录服务器在更新条目的父条目中没有找到对象类,则搜索将继续到目录树的根目录。
  • uniqueness-subtree-entries-oc.此参数标识插件必须检查哪些条目。当您在 uniqueness-subtree-entries-oc 参数中设置对象类时,插件仅在包含此特定对象类的更新条目中验证属性的唯一性。

使用以下示例流程将 mail 属性设置为在包含 nsContainer 对象类集的条目下的所有条目中唯一,并使用插件在包含 inetOrgPerson 对象类的条目中搜索 mail 属性。

先决条件

  • 有目录管理器权限。

流程

  1. 创建新的插件配置条目:

    # dsconf <instance_name> plugin attr-uniq add "Mail Uniqueness with OC" --attr-name mail --subtree-entries-oc=inetOrgPerson --top-entry-oc=nsContainer
    Copy to Clipboard Toggle word wrap

    命令创建带有 OC,cn=plugins,cn=config 条目的 cn=Mail Uniqueness,带有配置的 uniqueness-top-entry-ocuniqueness-subtree-entries-oc 插件参数。

  2. 可选:设置插件必须从属性唯一验证中排除的子树。

    例如,如果您希望插件跳过 ou=internal,ou=sales,dc=example,dc=com 子树,使用 ldapmodify 工具来设置 uniqueness-exclude-subtrees 参数:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=Mail Uniqueness with OC,cn=plugins,cn=config
    changetype: modify
    add: uniqueness-exclude-subtrees
    uniqueness-exclude-subtrees: ou=internal,ou=sales,dc=example,dc=com
    Copy to Clipboard Toggle word wrap
  3. 在服务器上启用插件:

    # dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness with OC"
    Successfully enabled the cn=mail uniqueness with oc,cn=plugins,cn=config
    Copy to Clipboard Toggle word wrap
  4. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

验证

  • 查看配置条目详情:

    # dsconf <instance_name> plugin attr-uniq show "Mail Uniqueness with OC"
    
    dn: cn=Mail Uniqueness with OC,cn=plugins,cn=config
    cn: Mail Uniqueness with OC
    nsslapd-plugin-depends-on-type: database
    nsslapd-pluginDescription: none
    nsslapd-pluginEnabled: on
    ...
    uniqueness-attribute-name: mail
    uniqueness-exclude-subtrees: ou=internal,ou=sales,dc=example,dc=com
    uniqueness-subtree-entries-oc: inetOrgPerson
    uniqueness-top-entry-oc: nsContainer
    Copy to Clipboard Toggle word wrap

5.4.3. 使用 Web 控制台配置属性唯一插件

您可以使用 Web 控制台配置属性唯一插件。请注意,您可以创建插件的不同配置条目以应用不同的条件。

使用以下示例流程配置插件,以验证 ou=sales,dc=example,dc=comou=accounting,dc=example,dc=com 子树下的 mail 属性的唯一性。

先决条件

流程

  1. 选择您要配置插件的实例。
  2. 打开 Plugins 菜单,然后从列表中选择 Attribute Uniqueness 插件。
  3. 单击 Add Config 按钮,以启动新配置条目的配置。
  4. Config Name 字段中输入配置条目的名称。
  5. Attribute Names 字段中选择哪些属性必须是唯一的。字段设置 uniqueness-attribute-name 属性。
  6. 输入子树,其中插件会在 Subtrees 字段中输入属性的唯一性。字段设置 uniqueness-subtrees 属性。

    默认情况下,插件仅在创建或更新条目的子树之间检查唯一性。要检查所有列出的子树,请选中 Across All Subtrees 复选框,该复选框将 uniqueness-across-all-subtrees 属性设置为。

  7. 将开关切换到 Configuration is enabled 位置。
  8. 单击 Add Config 按钮,以创建插件配置条目。

    图 5.1. 属性唯一插件的配置示例.

  9. 重新启动实例。如需了解更多详细信息,请参阅使用 Web 控制台启动和停止目录服务器实例

验证

  • 在配置条目列表中找到新创建的插件条目。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat