上一页      目录      索引      文档主页      下一页     
iPlanet Directory Server 5.1 管理员指南



第 17 章   使用属性唯一性插件


属性唯一性插件可用于确保所指定的属性在目录中始终具有唯一值。对于要确保值具有唯一性的各个属性而言,必须创建插件的新实例。

iPlanet Directory Server 5.1 所提供的 UID 唯一性插件可用于管理 UID 属性的唯一性。

本章将在以下各节中介绍属性唯一性插件及 UID 唯一性插件:



属性唯一性插件概述

属性唯一性插件是一种预处理插件。这就意味着该插件将在服务器执行 LDAP 操作前检查所有更新操作。该插件将确定操作是否适用于已配置为监控对象的某个属性及后缀。

如果更新操作适用于该插件所监控的属性和后缀,且会使两个条目具有相同的属性值,服务器就会终止该操作,同时向客户机返回 LDAP_CONSTRAINT_VIOLATION 错误。

属性唯一性插件对下列对象执行检查:

  • 单个属性

  • 一个或多个子树

如果希望检查多个属性的唯一性,则必须为所要检查的各个属性创建独立的插件实例。

还可以对属性唯一性插件的操作进行配置:

  • 它可以检查所指定的子树中的各个条目。

    例如,如果您所属的公司 siroe.com 有目录 Company333 和 Company999,则在添加诸如 uid=jlittle,ou=people,o=Company333,dc=siroe,dc=com 等条目时,则只需要在 o=Company333,dc=siroe,dc=com 子树中强制实施唯一性。这时,需要在 UID 唯一性插件配置中明确列出子树的 DN。

    有关该配置选项的详细说明,请参阅“指定后缀或子树”

  • 您可以在更新条目的 DN 中指定与条目有关的对象类,然后对下面的所有条目执行唯一性检查。

    该选项在主机环境中较为有用。例如,添加诸如 uid=jlittle,ou=people,o=Company333,dc=siroe,dc=com 等条目时,可以在 o=Company333,dc=siroe,dc=com 下强制实施唯一性,但在配置中不明确列出该子树,而是指示 marker 对象类。如果指定的 marker 对象类为 organization,则唯一性检查算法将找到 DN 中含有该对象类 (o=Company333) 的条目,然后对下面的所有条目执行检查。

    此外,还可以指定仅在更新条目中包含指定对象类的情况下执行唯一性检查。例如,可以指定仅在更新条目包含 objectclass=inetorgperson 时执行检查。

    有关该配置选项的详细说明,请参阅“使用 markerObjectClass 和 requiredObjectClass 关键字”

如果打算在复制环境中使用属性唯一性插件,请参阅“复制和属性唯一性插件”



UID 唯一性插件概述



iPlanet Directory Server 5.0 中提供了属性唯一性插件的一个实例:UID 唯一性插件。缺省情况下,该插件可确保赋予 UID 属性的值在为目录所配置的后缀中是唯一的(后缀对应于 userRoot 数据库)。

您可以更改配置,从而指定其它后缀或子树,或者指定仅在包含所提供的对象类的条目下执行检查。UID 唯一性插件的语法和配置与其它所有属性的相同。有关可以对配置进行何种更改的详细信息,请参阅“配置属性唯一性插件”

由于 UID 唯一性插件会影响多原版复制操作,因此缺省情况下将处于禁用状态。有关在复制环境中使用属性唯一性插件的信息,请参阅“复制和属性唯一性插件”



属性唯一性插件的语法



属性唯一性插件的配置信息是在 cn=plugins,cn=config 条目下的条目中指定的。可能的 nsslapd-pluginarg 属性语法结构有两种。区别之处已在以下部分突出显示。

使用下列语法可以在后缀或子树下执行唯一性检查:

dn: cn=descriptive_plugin_name,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: descriptive_plugin_namee
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: state
nsslapd-pluginarg0: attribute_name
nsslapd-pluginarg1: dn1
[ nsslapd-pluginarg2: dn2 ]
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values

注意:

  • 可以在 cn 属性中指定任何名称来命名插件。名称应具有说明性。该属性含要进行唯一性检查的属性的名称。

  • 您只能指定一个要进行唯一性检查的属性。

  • 对于要执行唯一性检查的后缀或子树而言,通过每次使 nsslapd-pluginarg 属性后缀递增 1,可以指定该后缀或子树的几个 DN。

有关属性唯一性插件语法的变量部分,请参阅表 17-1

使用下列语法可以指定在包含指定对象类的条目下执行唯一性检查:

dn: cn=descriptive_plugin_name,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: descriptive_plugin_name
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: state
nsslapd-pluginarg0: attribute=attribute_name
nsslapd-pluginarg1: markerObjectClass=objectclass1
[ nsslapd-pluginarg2: requiredObjectClass=objectclass2 ]
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values

注意:

  • 可以在 cn 属性中指定任何名称来命名插件。名称应具有说明性。该属性含要进行唯一性检查的属性的名称。

  • 您只能指定一个要进行唯一性检查的属性。

  • 如果 nsslapd-pluginarg0 属性以 attribute= attribute_name 开头,则服务器就会希望 nsslapd-pluginarg1 属性中包含 markerObjectClass

有关属性唯一性插件语法的变量部分,请参阅表 17-1


表 17-1    属性唯一性插件变量

变量

定义

descriptive_plugin_name  

指定该属性唯一性插件实例的名称。对于要确保唯一性的属性而言,并非必须包含其名称,但最好还是包含。例如 cn=mail uniqueness,cn=plugins,cn=config  

extension  

插件的文件扩展名。(.so)  

state  

定义是否启用该插件。可接受的值为 onoff。有关详细信息,请参阅“打开或关闭插件”  

attribute_name  

要确保其值具有唯一性的属性的名称。这里只能指定一个属性名。  

dn  

要确保其属性具有唯一性的后缀或子树的 DN。对于每个附加后缀或子树而言,通过将 nsslapd-pluginarg 属性的值递增 1,即可指定几个后缀或子树。  

attribute=attribute_name  

要确保其值具有唯一性的属性的名称。这里只能指定一个属性名。  

markerObjectClass=objectclass1  

对于在 markerObjectClass 关键字中指定了对象类的更新条目而言,如果某个条目属于该条目的 DN,系统就会在其中执行属性唯一性检查。

请勿在等号前后包含空格。  

requiredObjectClass=objectclass2  

可选。使用 markerObjectClass 关键字而非 DN 来指定唯一性检查的范围时,可以指定仅在更新条目中包含 requiredObjectClass 关键字中指定的对象类时才执行检查。

请勿在等号前后包含空格。  



创建属性唯一性插件的实例



如果想确保目录中的某个特定属性始终具有唯一的值,则必须为要检查的属性创建属性唯一性插件的实例。例如,如果想确保目录中包含 mail 属性的各个条目都有该属性的唯一值,则必须创建 mail 唯一性插件。

要创建属性唯一性插件的实例,您必须修改 dse.ldif 文件,在 cn=plugins,cn=config 条目下为新插件添加一个条目。新条目的格式必须符合“属性唯一性插件的语法”中所述的语法。

例如,要实例化 mail 属性的属性唯一性插件,您需要执行下列步骤:

  1. dse.ldif 文件中,查找 UID 唯一性插件条目 cn=uid uniqueness,cn=plugins,cn=config

  2. 在 UID 唯一性插件条目的前后,为 mail 唯一性插件条目添加以下各行:

    dn: cn=mail uniqueness,cn=plugins,cn=config
    objectClass: top
    objectClass: nsSlapdPlugin
    objectClass: extensibleObject
    cn: mail uniqueness
    nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
    nsslapd-pluginInitfunc: NSUniqueAttr_Init
    nsslapd-pluginType: preoperation
    nsslapd-pluginEnabled: on
    nsslapd-pluginarg0: mail
    nsslapd-pluginarg1: dc=siroe,dc=com
    nsslapd-plugin-depends-on-type: database
    nsslapd-pluginId: NSUniqueAttr
    nsslapd-pluginVersion: 5.0
    nsslapd-pluginVendor: Sun | Netscape Alliance
    nsslapd-pluginDescription: Enforce unique attribute values

  3. 重新启动 iPlanet Directory Server。

本例中,系统将对包含 mail 属性的 dc=siroe,dc=com 条目中的各个条目执行唯一性检查。



配置属性唯一性插件



本节介绍如何使用 iPlanet Directory Server Console 来查看为目录所配置的插件,同时说明如何修改属性唯一性插件的配置。


查看插件配置信息

在 iPlanet Directory Server Console 中,可以按如下所示显示属性唯一性插件的配置条目:

  1. 在 iPlanet Directory Server Console 中,单击“目录”选项卡。

  2. 在左侧的导航树中,展开 config 文件夹,然后展开 Plugins 文件夹。

    插件列表将显示在右侧的导航窗口中。此时应看到 UID 唯一性插件及在“创建属性唯一性插件的实例”示例中所创建的其它所有属性唯一性插件。

  3. 在右侧导航窗口中,双击要查看的插件条目。

    此时显示“属性编辑器”。其中包含所有插件属性和值的列表。


从 iPlanet Directory Server Console 配置属性唯一性插件

在 iPlanet Directory Server Console 中可以通过几种方式来更新插件配置:

要从 iPlanet Directory Server Console“配置”选项卡中修改属性唯一性插件的配置:

  1. 在 iPlanet Directory Server Console 上,选择“配置”选项卡,然后在导航树中展开 Plugins 文件夹,之后选择要修改的属性唯一性插件。

    插件的配置参数将显示在左侧窗口中。

  2. 要打开或关闭插件,请选中或清除“启用插件”复选框。

  3. 要添加后缀或子树,请单击“添加”,然后在空的文本字段中键入 DN。

    如果不想添加 DN,可以使用 markerObjectClass 关键字。如果使用该语法,则可再次单击“添加”,按“属性唯一性插件的语法”中所述指定 requiredObjectClass。



    注意 此列表中不得添加属性名。如果想检查其它属性的唯一性,则必须为所要检查的属性创建属性唯一性插件的实例。有关信息,请参阅创建属性唯一性插件的实例



  4. 要从列表中删除某一项,请将光标置于要删除的文本字段中,然后单击“删除”。

  5. 单击“保存”可保存更改结果。


从命令行配置属性唯一性插件

本节提供有关从命令行配置插件的信息。其中涉及以下任务:


打开或关闭插件

要从命令行打开插件,则必须创建包含下列 LDIF 更新语句的 LDIF 文件:

dn: cn=descriptive_plugin_name,cn=plugins,cn=config
changetype: modify
replace: nsslapd-pluginenabled
nsslapd-pluginenabled: on

使用 ldapmodify 命令可以将 LDIF 文件导入到目录中。

要禁用插件,请更改 LDIF 更新语句:将 nsslapd-pluginenabled: on 语句替换为 nsslapd-pluginenabled: off 语句。

启用或禁用插件时,必须重新启动服务器。有关重新启动服务器的信息,请参阅“启动和停止 iPlanet Directory Server”


指定后缀或子树

您可以指定希望插件确保其内容具有属性唯一性的后缀或子树,方法是在定义该插件的条目中使用 nsslapd-pluginarg 属性。

通过创建包含如下例中所示的更新语句的 LDIF 文件,即可指定子树:

dn: cn=mail uniqueness,cn=plugins,cn=config
changetype: add
nsslapd-pluginarg2: dc=iplanet,dc=sun,dc=com
nsslapd-pluginarg3: dc=iplanet,dc=netscape,dc=com

本 LDIF 文件示例将检查子树 dc=siroe,dc=comdc=iplanet,dc=sun,dc=comdc=iplanet, dc=netscape.commail 属性的唯一性。

使用 ldapmodify 命令可以将 LDIF 文件导入到目录中。

进行上述类型的配置更改时,必须重新启动服务器。有关重新启动服务器的信息,请参阅“启动和停止 iPlanet Directory Server”


使用 markerObjectClass 和 requiredObjectClass 关键字

除了在属性唯一性插件的配置中指定后缀或子树外,还可以对属于更新条目的 DN,且更新条目中具有 markerObjectClass 关键字中所指定的对象类的条目执行检查。

要指定对包含组织单元 (ou) 对象类的更新条目 DN 中的条目进行唯一性检查,则可以创建如下例中所示的 LDIF 文件:

dn: cn=mail uniqueness,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: mail uniqueness
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: attribute=mail
nsslapd-pluginarg1: markerObjectClass=ou
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values

如果不希望服务器检查组织单元条目下的各个条目,则可指定仅在更新条目中包含指定对象类的情况下才执行检查,从而限定检查的范围。

例如,如果是检查 mail 属性的唯一性,则可能有必要仅在添加或修改包含 personinetorgperson 对象类的条目时才执行检查。

通过使用 requiredObjectClass 关键字,可以限制检查范围,如下例所示:

dn: cn=mail uniqueness,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: mail uniqueness
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: attribute=mail
nsslapd-pluginarg1: markerObjectClass=ou
nsslapd-pluginarg2: requiredObjectClass=person
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values

通过递增 nsslapd-pluginarg 属性后缀的计数器并不能重复 markerObjectClassrequiredObjectClass 关键字。



注意 nsslapd-pluginarg0 属性始终包含要确保唯一性的属性的名称。





属性唯一性插件语法示例



本节在 dse.ldif 文件中含有属性唯一性插件语法的示例。所有示例所示的插件语法与其在 UNIX 系统上出现的语法都相同。


指定一个属性及一个子树
本例将对插件进行配置,确保 dc=siroe,dc=com 子树下 mail 属性的唯一性。

dn: cn=mail uniqueness,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: mail uniqueness
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: mail
nsslapd-pluginarg1: dc=siroe,dc=com
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values


指定一个属性及多个子树
本例将对插件进行配置,确保 l=Chicago,dc=siroe,dc=coml=Boston,dc=siroe,dc=com 子树下 mail 属性的唯一性。

dn: cn=mail uniqueness,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: mail uniqueness
nsslapd-pluginPath: /usr/iplanet/ds5/lib/uid-plugin.so
nsslapd-pluginInitfunc: NSUniqueAttr_Init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: mail
nsslapd-pluginarg1: l=Chicago,dc=siroe,dc=com
nsslapd-pluginarg2: l=Boston,dc=siroe,dc=com
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: NSUniqueAttr
nsslapd-pluginVersion: 5.0
nsslapd-pluginVendor: Sun | Netscape Alliance
nsslapd-pluginDescription: Enforce unique attribute values



注意 nsslapd-pluginarg0 属性始终包含要确保唯一性的属性的名称。其它所有位置出现的 nsslapd-pluginargnsslapd-pluginarg1nsslapd-pluginargx)都包含 DN。



利用该配置,插件允许 mail 属性值的实例分别在 l=Chicago,dc=siroe,dc=com 子树和 l=Boston,dc=siroe,dc=com 子树下各存在一次。例如,下列情况是允许的:

mail=bjensen,l=Chicago,dc=siroe,dc=com

mail=bjensen,l=Boston,dc=siroe,dc=com

如果想确保两个子树下只有值的一个实例,则需要对插件进行配置,以确保整个 dc=siroe,dc=com 子树的唯一性。



复制和属性唯一性插件



在涉及复制协议的 iPlanet Directory Server 上使用属性唯一性插件时,必须审慎考虑在各个服务器上如何配置插件。

应考虑下列情况:

  • 简单复制:有一个供给器及一个或多个客户

  • 复杂复制:有多个原版

当作为复制操作的一部分而执行更新时,属性唯一性插件不会对属性值执行任何检查。


简单复制环境

由于客户机应用程序所做的所有修改都是在供给服务器上进行的,因此应启用供给器上的属性唯一性插件。客户服务器上没必要启用该插件。

启用客户上的属性唯一性插件不会阻碍 iPlanet Directory Server 的正常运行,但可能会导致性能降低。


多原版复制环境

在多原版复制环境中,两个原版同时充当同一副本的供给器和客户。由于多原版复制使用松散的一致性复制模式,因此在一个服务器上启用属性唯一性插件尚不足以确保属性值在给定的时间内在两个原版上保持唯一性。因此,在一个服务器上启用属性唯一性插件可导致各个副本上所持数据的不一致。

但在满足下列所有条件的前提下,可以使用属性唯一性插件:

  • 进行唯一性检查的属性为命名属性

  • 两个原版上都已启用属性唯一性插件

在满足上述条件的情况下,复制时的属性唯一性冲突将报告为命名冲突。命名冲突需要进行手动解决。有关如何解决复制冲突的信息,请参阅“解决常见复制冲突”


上一页      目录      索引      文档主页      下一页     
版权所有 © 2001 Sun Microsystems, Inc.。部分版权所有 © 2001 Netscape Communications Corp.。保留所有权利。

最近更新时间 2002 年 2 月 15 日