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
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=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息,请参阅配置通过子树的属性插件。
使用
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
uniqueness-attribute-name: mail uniqueness-top-entry-oc: nsContainer uniqueness-subtree-entries-oc: inetOrgPerson uniqueness-exclude-subtrees: ou=private,ou=people,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息 ,请参阅通过对象类配置属性插件。
您可以创建插件的多个配置条目以应用不同的条件。目录服务器在 cn=plugins,cn=config 下存储插件的所有配置条目。
5.4.1. 使用命令行配置属性唯一插件 复制链接链接已复制到粘贴板!
您可以使用 dsconf 工具来设置子树列表,其中插件必须检查属性的唯一性。子树可以是目录中的任何条目,包括后缀。
使用以下示例流程配置插件,以验证 ou=sales,dc=example,dc=com 和 ou=accounting,dc=example,dc=com 子树下的 mail 属性的唯一性。
先决条件
- 有目录管理器权限。
流程
创建新的插件配置条目:
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
# dsconf <instance_name> plugin attr-uniq add "Mail Uniqueness" --attr-name mail --subtree ou=sales,dc=example,dc=com ou=accounting,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令创建
cn=Mail Uniqueness,cn=plugins,cn=config配置条目。注意您可以设置插件来验证一个配置条目中多个属性的唯一性。
可选:在此插件配置条目中配置的所有子树中配置唯一性:
dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --across-all-subtrees on
# dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --across-all-subtrees onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
上,将uniqueness-across-all-subtrees插件配置参数设置为。因此,插件会检查ou=sales,dc=example,dc=com和ou=accounting,dc=example,dc=com子树中的mail属性的唯一性。默认情况下,插件只检查创建或更新条目的子树中的唯一性,这意味着如果您创建或更新ou=sales,dc=example,dc=com下的条目,插件只会检查这个子树中的mail属性的唯一性。可选:设置插件必须从属性唯一验证中排除的子树。
例如,如果您希望插件跳过
ou=internal,ou=sales,dc=example,dc=com子树,您可以使用ldapmodify工具来设置uniqueness-exclude-subtrees参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您只验证包含特定对象类的条目中的唯一插件,请将此对象类设置为
uniqueness-subtree-entries-oc参数的值。例如,您希望
mail属性仅在包含inetOrgPerson对象类的条目中唯一,请输入:dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --subtree-entries-oc=inetOrgPerson
# dsconf <instance_name> plugin attr-uniq set "Mail Uniqueness" --subtree-entries-oc=inetOrgPersonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器上启用插件:
dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness"
# dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看配置条目详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 属性。
先决条件
- 有目录管理器权限。
流程
创建新的插件配置条目:
dsconf <instance_name> plugin attr-uniq add "Mail Uniqueness with OC" --attr-name mail --subtree-entries-oc=inetOrgPerson --top-entry-oc=nsContainer
# dsconf <instance_name> plugin attr-uniq add "Mail Uniqueness with OC" --attr-name mail --subtree-entries-oc=inetOrgPerson --top-entry-oc=nsContainerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令创建带有
OC,cn=plugins,cn=config 条目的 cn=Mail Uniqueness,带有配置的uniqueness-top-entry-oc和uniqueness-subtree-entries-oc插件参数。可选:设置插件必须从属性唯一验证中排除的子树。
例如,如果您希望插件跳过
ou=internal,ou=sales,dc=example,dc=com子树,使用ldapmodify工具来设置uniqueness-exclude-subtrees参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器上启用插件:
dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness with OC"
# dsconf <instance_name> plugin attr-uniq enable "Mail Uniqueness with OC" Successfully enabled the cn=mail uniqueness with oc,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看配置条目详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.3. 使用 Web 控制台配置属性唯一插件 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台配置属性唯一插件。请注意,您可以创建插件的不同配置条目以应用不同的条件。
使用以下示例流程配置插件,以验证 ou=sales,dc=example,dc=com 和 ou=accounting,dc=example,dc=com 子树下的 mail 属性的唯一性。
先决条件
- 有目录管理器权限。
- 已登陆到 web 控制台。如需了解更多详细信息 ,请参阅使用 Web 控制台登录到目录服务器。
流程
- 选择您要配置插件的实例。
- 打开 Plugins 菜单,然后从列表中选择 Attribute Uniqueness 插件。
- 单击 按钮,以启动新配置条目的配置。
- 在 Config Name 字段中输入配置条目的名称。
-
在 Attribute Names 字段中选择哪些属性必须是唯一的。字段设置
uniqueness-attribute-name属性。 输入子树,其中插件会在 Subtrees 字段中输入属性的唯一性。字段设置
uniqueness-subtrees属性。默认情况下,插件仅在创建或更新条目的子树之间检查唯一性。要检查所有列出的子树,请选中 复选框,该复选框将
uniqueness-across-all-subtrees属性设置为。-
将开关切换到
Configuration is enabled位置。 单击 按钮,以创建插件配置条目。
图 5.1. 属性唯一插件的配置示例.
- 重新启动实例。如需了解更多详细信息,请参阅使用 Web 控制台启动和停止目录服务器实例。
验证
- 在配置条目列表中找到新创建的插件条目。