前へ     目次     索引     DocHome     次へ     
iPlanet Directory Server 5.1 管理者ガイド



第 17 章   属性一意性検査プラグインの使い方


属性一意性検査プラグインを使用すると、指定した属性に対して、ディレクトリ内で常に一意の値を持たせることができます。一意の値を持たせる属性ごとに、プラグインのインスタンスを新しく作成する必要があります。

iPlanet Directory Server 5.1 では、uid 属性の一意性を管理するための uid 一意性検査プラグインを使用できます。

この章では、属性一意性検査プラグインおよび uid 一意性検査プラグインについて、次の項目ごとに説明します。



属性一意性検査プラグインの概要

属性一意性検査プラグインは、前処理用のプラグインです。つまり、LDAP 処理が実行される前に、プラグインによってすべての更新操作が検査されます。プラグインによって、その処理が監視用に構成された属性および接尾辞に適用されるものであるかどうかが判別されます。

属性一意性検査プラグインによって監視されている属性や接尾辞に対して更新操作が実行され、2 つのエントリが同じ属性値を持った場合、サーバは処理を終了し、クライアントに LDAP_CONSTRAINT_VIOLATION エラーを返します。

属性一意性検査プラグインの検査対象を次に示します。

  • 1 つの属性

  • 1 つまたは数個のサブツリー

複数の属性に対して一意性検査を実行する場合は、検査する属性ごとにプラグインのインスタンスを作成する必要があります。

また、属性一意性検査プラグインの動作を、次のように構成することもできます。

  • 指定したサブツリー内の各エントリに対して検査する

    たとえば、siroe.com という会社で Company333 および Company999 という 2 つの会社のディレクトリをホスティングしている場合、uid=jlittle,ou=people,o=Company333,dc=siroe,dc=com のようなエントリを追加するときは、o=Company333,dc=siroe,dc=com サブツリー内だけを対象に一意性を設定する必要があります。このためには、サブツリーの DN を uid 一意性検査プラグインの構成に明示的に記述します。

    この構成オプションについては、「接尾辞またはサブツリーの指定」を参照してください。

  • 更新済みエントリの DN 内のエントリに属するオブジェクトクラスを指定し、その下にあるすべてのエントリについて一意性検査を実行する

    このオプションは、ホストされる側の環境で便利です。たとえば、uid=jlittle,ou=people,o=Company333,dc=siroe,dc=com のようなエントリを追加する場合は、o=Company333,dc=siroe,dc=com サブツリーをその構成に明示的にリストせずに marker オブジェクトクラスを指定することで、そのサブツリーの下位レベルに対して一意性検査を強制できます。marker オブジェクトクラスに organization を指定すると、一意性検査のアルゴリズムによってこのオブジェクトクラス (o=Company333) を持つ DN 内のエントリが検索され、その下にあるすべてのエントリに対して一意性検査が実行されます。

    さらに、更新済みエントリに特定のオブジェクトクラスが含まれる場合にだけ、一意性検査を実行するように指定することもできます。たとえば、更新済みエントリに objectclass=inetorgperson が含まれている場合にだけ、一意性検査を実行するように指定できます。

    この構成オプションについては、「markerObjectClass および requiredObjectClass キーワードの使い方」を参照してください。

レプリケーション環境で属性一意性検査プラグインを使用する場合は、「レプリケーションと属性一意性検査プラグイン」を参照してください。



uid 一意性検査プラグインの概要



iPlanet Directory Server5.0 には、属性一意性検査プラグインのインスタンスである uid 一意性検査プラグインを提供します。デフォルトでは、プラグインを実行することにより、そのプラグインはディレクトリをインストールするときに構成した接尾辞内で、uid 属性に指定された値が一意になることを保証します (この接尾辞は、userRoot データベースに対応)。

このプラグインは、別の接尾辞やサブツリーを指定したり、特定のオブジェクトクラスを含むエントリの下位レベルに対してだけ一意性検査を実行したりするように構成を変更できます。uid 一意性検査プラグインの構文および構成は、ほかの属性と同じです。構成の変更については、「属性一意性検査プラグインの構成」を参照してください。

デフォルトでは、uid 一意性検査プラグインは無効になっています。これは、このプラグインがマルチマスターレプリケーションに影響を与えるためです。レプリケーション環境での属性一意性検査プラグインの使用については、「レプリケーションと属性一意性検査プラグイン」を参照してください。



属性一意性検査プラグインの構文



属性一意性検査プラグインの構成情報は、cn=plugins,cn=config エントリの下にあるエントリで指定します。nsslapd-pluginarg 属性の構文には、2 つの種類があります。2 種類の構文の違いは、以下の属性一意性検査プラグインの構文中に太字で示されています。

次の例では、接尾辞またはサブツリー以下だけを対象に、一意性検査を実行しています。

dn: cn=descriptive_plugin_name,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: descriptive_plugin_namee
nsslapd-pluginPath: /usr/iplanet/servers/lib/uid-plugin.extension
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 属性には、任意のプラグイン名を指定できる。プラグインの内容を説明するような名前を使用する。この属性には、一意性を検査する属性の名前は含まれない

  • 一意性検査が実行される属性は、1 つしか指定できない

  • nsslapd-pluginarg 属性の末尾の数字をそれぞれの回で 1 ずつ増分することによって、一意性検査を実行する接尾辞またはサブツリーの複数の DN を指定できる

属性一意性検査プラグインの構文で使用する変数については、表 17-1 で説明しています。

次の例では、特定のオブジェクトクラスを持つエントリより下のものだけを対象に、一意性検査を実行するように指定しています。

dn: cn=descriptive_plugin_name,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: descriptive_plugin_namee
nsslapd-pluginPath: /usr/iplanet/servers/lib/uid-plugin.extension
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 属性には、任意のプラグイン名を指定できる。プラグインの内容を説明するような名前を使用する。この属性には、一意性を検査する属性の名前は含まれない

  • 一意性検査が実行される属性は、1 つしか指定できない

  • nsslapd-pluginarg0 属性が attribute= attribute_name で始まる場合は、nsslapd-pluginarg1 属性に markerObjectClass が含まれると想定される

属性一意性検査プラグインの構文で使用する変数については、表 17-1 で説明しています。


表 17-1 属性一意性検査プラグインの変数 

変数

定義

descriptive_plugin_name  

属性一意性検査プラグインのインスタンスの名前を指定する。一意性を保持する属性名を含める必要はないが、含めることを推奨する。
例 : cn=mail uniqueness,cn=plugins,cn=config
 

extension  

プラグインのファイル拡張子。拡張子は常に、HP-UX の場合は .sl、その他の UNIX プラットフォームの場合は .so、Windows NT の場合は .dll になる  

state  

プラグインが有効か無効かを指定する。指定できる値は on または off。詳細は、「プラグインのオンとオフの切り替え」を参照  

attribute_name  

一意の値を保持する対象の属性名。属性名は 1 つしか指定できない  

dn  

属性一意性を保持する接尾辞またはサブツリーの DN。nsslapd-pluginarg 属性の末尾の数字を接尾辞またはサブツリーごとに 1 ずつ増分することによって、複数の接尾辞またはサブツリーを指定できる  

attribute=attribute_name  

一意の値を保持する対象の属性名。属性名は 1 つしか指定できない  

markerObjectClass=objectclass1  

markerObjectClass キーワードで指定したオブジェクトクラスを持つ更新エントリの DN に属するエントリの下位レベルに対して、属性一意性検査が実行される

等号 (=) の前後には、空白を挿入しないようにする  

requiredObjectClass=objectclass2  

省略可能。DN の代わりに markerObjectClass キーワードを使用して一意性検査の範囲を指定する場合は、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/servers/lib/uid-plugin.extension
    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. Directory Server を再起動します。

この例では、dc=siroe,dc=com エントリ内の mail 属性を持つ各エントリを対象に、一意性検査が実行されます。



属性一意性検査プラグインの構成



この節では、ディレクトリに対して構成されたプラグインを表示するための Directory Server Console の使い方、および属性一意性検査プラグインの構成の修正方法を説明します。


プラグイン構成情報の表示

Directory Server Console を使用して属性一意性検査プラグインの構成エントリを表示するには、次の手順を実行します。

  1. Directory Server Console で、「ディレクトリ」タブをクリックします。

  2. 左側のナビゲーションツリーで、config フォルダを展開してから、plugins フォルダを展開します。

    プラグインの一覧が右側のナビゲーションウィンドウに表示されます。このウィンドウには、uid 一意性検査プラグインと、「属性一意性検査プラグインのインスタンスの作成」の説明に従って作成したその他の属性一意性検査プラグインが表示されます。

  3. 右側のナビゲーションウィンドウで、表示するプラグインエントリをダブルクリックします。

    属性エディタが表示されます。このエディタには、プラグインに関する属性および値がすべて一覧表示されます。


Directory Server Console を使用した属性一意性検査プラグインの構成

Directory Server Console を使用してプラグイン構成を更新するには、次の方法を使用します。

Directory Server Console の「構成」タブで属性一意性検査プラグインの構成を変更するには、次の手順を実行します。

  1. 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 ファイルをディレクトリにインポートします。ldapmodify コマンドについては、『iPlanet Directory Server 構成、コマンド、およびファイルのリファレンス』を参照してください。

プラグインを無効にするには、LDIF 更新文の nsslapd-pluginenabled:on 文を、nsslapd-pluginenabled:off 文に置き換えるように変更します。

プラグインを有効または無効に指定した場合は、必ずサーバを再起動してください。サーバの再起動については、「Directory Server の起動と停止」を参照してください。


接尾辞またはサブツリーの指定

プラグインを定義するエントリ内の nsslapd-pluginarg 属性を使用して、属性の一意性を保持する対象の接尾辞またはサブツリーを指定します。

次の例と同じような更新文を含む LDIF ファイルを作成することによって、1 つ以上のサブツリーを指定できます。

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=com、および dc=iplanet, dc=netscape.com の各サブツリーの下位レベルにある mail 属性の一意性を検査します。

ldapmodify コマンドを使用して、LDIF ファイルをディレクトリにインポートします。ldapmodify コマンドについては、『iPlanet Directory Server 構成、コマンド、およびファイルのリファレンス』を参照してください。

このような構成の変更を行なった場合は、必ずサーバを再起動してください。サーバの再起動については、「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/servers/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 属性の一意性を検査する場合に、person または inetorgperson オブジェクトクラスを持つエントリを追加または変更する場合にだけ検査を実行する必要があるとします。

次の例に示すように、requiredObjectClass キーワードを使用して、検査の範囲を限定できます。

dn: cn=mail uniqueness,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: mail uniqueness
nsslapd-pluginPath: /usr/iplanet/servers/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 属性の末尾の数字を増分することによって、markerObjectClass または requiredObjectClass の各キーワードを繰り返し使用することはできません。



 

nsslapd-pluginarg0 属性には、常に一意性を保持する属性名を指定します。  





属性一意性検査プラグインの構文例



ここでは、dse.ldif ファイルで指定する属性一意性検査プラグインの構文例を示します。例に示されている構文はすべて、UNIX マシンで現れるようなプラグイン構文です。


1 つの属性および 1 つのサブツリーの指定
次の例では、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/servers/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


1 つの属性および複数のサブツリーの指定
次の例では、l=Chicago,dc=siroe,dc=com および l=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/servers/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-pluginarg 属性 (nsslapd-pluginarg1 から nsslapd-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

両方のサブツリーの下に同じ値のインスタンスが 1 つだけ存在するようにする場合は、dc=siroe,dc=com サブツリー全体に対して一意性を保持するようプラグインを設定する必要があります。



レプリケーションと属性一意性検査プラグイン



レプリケーションアグリーメントに関係している Directory Server 上で属性一意性検査プラグインを使用する場合は、各サーバでのプラグインの構成方法について慎重に検討する必要があります。

次のケースを想定します。

  • 1 つのサプライヤと 1 つから数台のコンシューマによる単純なレプリケーション

  • マルチマスターによる複雑なレプリケーション

属性一意性検査プラグインでは、レプリケーションの一部として更新処理が行われた場合は、属性値の検査は一切行われません。


単純なレプリケーションモデル

クライアントアプリケーションによる変更処理はすべてサプライヤサーバ上で行われるので、属性一意性検査プラグインをサプライヤサーバ上で有効にする必要があります。コンシューマサーバでは、属性一意性検査プラグインを有効にする必要はありません。

属性一意性検査プラグインをコンシューマサーバ上で有効にしても、Directory Server は正常に処理を行いますが、性能が低下する場合があります。


マルチマスターレプリケーションモデル

マルチマスターレプリケーションモデルでは、2 つのマスターが同一のレプリカに対して、サプライヤとコンシューマの両方の役割を果たします。マルチマスターレプリケーションは疎整合型のレプリケーションモデルを使用するので、1 つのサーバ上で属性一意性検査プラグインを有効にしても、2 つのマスター上のすべての属性値が、常に一意であることを確保するには不十分です。逆に、1 つのサーバだけで属性一意性検査プラグインを有効にすると、各レプリカで保持されるデータの整合性がとれなくなる可能性もあります。

ただし、次の条件をすべて満たしている場合は、属性一意性検査プラグインを使用できます。

  • 一意性検査の実行対象となる属性が命名属性である

  • 属性一意性検査プラグインが 2 つのマスター上で有効になっている

これらの条件を満たしている場合は、属性の一意性に関する競合は、レプリケーション時の命名競合として報告されます。ただし、レプリケーション時の命名競合は、手動で解決する必要があります。レプリケーションの競合を解決する方法については、「よく発生するレプリケーションの競合の解決」を参照してください。


前へ     目次     索引     DocHome     次へ     
Copyright © 2001 Sun Microsystems, Inc. Some preexisting portions Copyright © 2000 Netscape Communications Corp. All rights reserved.

Last Updated February 26, 2002