![]() | |
Sun Java™ System Directory Server 5 2004Q2 管理ガイド |
第 15 章
属性値の一意性の適用UID 一意性検査プラグインは、指定された属性の値が、ディレクトリまたはサブツリーのすべてのエントリで一意であることを確認します。このプラグインは、指定された属性に既存の値を含むエントリを追加しようとする操作や、ディレクトリ内の既存の値に属性を追加または変更する操作を停止させます。
UID 一意性検査プラグインはデフォルトでは無効になっています。有効にすると、デフォルトで UID 属性の一意性を確認します。プラグインの新しいインスタンスを作成して、その他の属性値を一意にすることができます。UID 一意性検査プラグインが属性値の一意性を確認できるのは、1 つのサーバー上だけです。
この章は、次の節で構成されています。
概要UID 一意性検査プラグインは、前処理用のプラグインです。サーバーでディレクトリの更新が実行される前に、すべての LDAP 操作が検査されます。このプラグインでは、操作によって同じ属性値を持つエントリが 2 つ発生するかどうかを判別します。同じ属性値を持つエントリが 2 つ発生することが判明した場合は、サーバーは操作を中断させて、エラー 19 (LDAP_CONSTRAINT_VIOLATION) をクライアントへ返します。
このプラグインは、ディレクトリ内の 1 つ以上のサブツリーや、特定のオブジェクトクラスのエントリ間で、一意性を確保するように設定できます。この設定により、属性値を一意にするエントリのセットが決まります。このエントリセットがターゲットとなった場合、また属性値がこのセットのエントリ全体の中で一意ではない場合、操作は中断されることがあります。
他の属性の一意性を確保する必要がある場合は、UID 一意性検査プラグインの複数のインスタンスを定義します。値を一意にするエントリと属性のセットごとに 1 つのプラグインインスタンスを定義します。同じ属性に複数のプラグインインスタンスを用意することで、複数のエントリセットでその属性の一意性を個別に確保できます。指定した属性値は、各セットでは 1 つだけに限定されます。
既存のディレクトリで属性値の一意性を有効にしても、サーバーは既存のエントリ間での一意性をチェックしません。一意性が適用されるのは、エントリを追加する時点、あるいは属性が追加または変更される時点です。
デフォルトでは、UID 一意性検査プラグインは無効になっています。これは、このプラグインがマルチマスターレプリケーションに影響を与えるためです。レプリケーションを使用する場合に UID 一意性検査プラグインを有効にすることはできますが、「レプリケーション使用時の一意性検査プラグインの使用」で説明される動作を理解しておく必要があります。
UID 属性の一意性の適用ここでは、UID 属性のデフォルトの一意性検査プラグインを有効にする方法と設定する方法について説明します。その他の属性に一意性を適用する方法については、「その他の属性の一意性の適用」を参照してください。
コンソールを使用したプラグインの設定
コンソールの使用時には、デフォルトの UID 一意性検査プラグインを変更して、別の属性の一意性を適用しないでください。UID 一意性検査プラグインを使用しない場合は、このプラグインを無効にし、別の属性に対して新しいプラグインインスタンスを作成します。詳細は、「その他の属性の一意性の適用」を参照してください。
- Directory Server コンソールの最上位の「設定」タブで「プラグイン」ノードを展開し、uid uniqueness プラグインを選択します。
- 右側のパネルで、「プラグインを有効に」チェックボックスを選択します。
初期化関数とプラグインモジュールパスに関するフィールドを変更しないでください。
- 一意性を適用するサブツリーの指定方法に従って、プラグイン引数を変更します。
- 1 つのサブツリーのベース DN を指定するには、引数 2 の値を編集します。複数のサブツリーを指定するには、「追加」をクリックして引数を追加し、新しいテキストフィールドにそれぞれのサブツリーのベース DN を入力します。
- ベースエントリのオブジェクトクラスによってサブツリーを指定するには、引数に次の値を設定します。
引数 1 : attribute=UID
引数 2 : markerObjectClass=baseObjectClassプラグインは、指定された baseObjectClass を持つディレクトリ内の各エントリの下位にあるサブツリーに対して、UID の一意性を適用します。たとえば、ou=Employees や ou=Contractors など多くの分岐にユーザーエントリがある場合は、markerObjectClass=organizationalUnit を指定します。
marker オブジェクトの下位にある分岐の適用範囲は非常に広い可能性があるため、属性の一意性の適用を、さらにそれらのオブジェクトクラスの特定のエントリごとに制限することもできます。第 3 のプラグイン引数を追加するために「追加」をクリックし、次の値を設定します。
引数 3 : requiredObjectClass=entryObjectClass
baseObjectClass を持つエントリのサブツリー内で、entryObjectClass を持つエントリをターゲットとする操作だけで、一意性を適用できます。たとえば、従来からのユーザーエントリがある場合は、requiredObjectClass=inetorgperson を指定します。
- UID 一意性検査プラグインの編集が終了したら、「保存」をクリックします。変更内容を有効にするには、サーバーを再起動する必要があります。
- サーバーを再起動して、UID 属性に対して一意の値の適用を開始します。
コマンド行からのプラグインの設定
ldapmodify コマンドを使用して UID 一意性検査プラグインを有効にし、設定する方法について、次の手順で説明します。プラグイン設定エントリの DN は、cn=UID uniqueness,cn=plugins,cn=config です。
- nsslapd-pluginEnabled 属性を on または off に設定して、プラグインを有効または無効にします。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=UID uniqueness,cn=plugins,cn=config
changetype:modify
replace:nsslapd-pluginEnabled
nsslapd-pluginEnabled: on or off
^D- 一意性を適用するサブツリーの指定方法に従って、プラグイン引数を変更します。
- 1 つのサブツリーのベース DN を指定するには、nsslapd-pluginarg1 の値を変更します。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=UID uniqueness,cn=plugins,cn=config
changetype:modify
replace:nsslapd-pluginArg1
nsslapd-pluginArg1:subtreeBaseDN
^D複数のサブツリーを指定するには、各サブツリーの完全ベース DN を値として指定した引数を追加します。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=UID uniqueness,cn=plugins,cn=config
changetype:modify
add:nsslapd-pluginArg2
nsslapd-pluginArg2:subtreeBaseDN
-
add:nsslapd-pluginArg3
nsslapd-pluginArg3:subtreeBaseDN
-
...
^D- ベースエントリのオブジェクトクラスに従ってサブツリーを指定するには、引数に次の値を設定します。baseObjectClass を持つ各エントリの下位にあるサブツリーに対して、UID 属性の一意性が適用されます。オプションとして、3 番目の引数に entryObjectClass を指定すると、このオブジェクトクラスを持つエントリをターゲットとする操作だけで、一意性を適用することもできます。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=UID uniqueness,cn=plugins,cn=config
changetype:modify
replace:nsslapd-pluginArg0
nsslapd-pluginArg0:attribute=UID
-
replace:nsslapd-pluginArg1
nsslapd-pluginArg1: markerObjectClass=baseObjectClass
-
replace:nsslapd-pluginArg2
nsslapd-pluginArg2: requiredObjectClass=entryObjectClass
^D- 変更内容を有効にするために、サーバーを再起動します。
その他の属性の一意性の適用UID 一意性検査プラグインを使用すると、すべての属性の一意性を適用できます。ディレクトリの cn=plugins,cn=config の下に新しいエントリを作成することによって、プラグインの新しいインスタンスを作成する必要があります。
- ldapmodify コマンドを使用して、新しいプラグインインスタンスの設定エントリを追加します。コマンドの最初の部分は、次のとおりです。残りの部分については、以下の手順で説明します。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=plug-in_name,cn=plugins,cn=config
objectClass:top
objectClass:nsSlapdPlugin
objectClass:extensibleObject
cn: plug-in_name
nsslapd-pluginDescription:Enforce unique attribute values
nsslapd-pluginType:preoperation
nsslapd-plugin-depends-on-type:データベース
nsslapd-pluginPath: ServerRoot/lib/uid-plugin.so
nsslapd-pluginVersion: 5.2
nsslapd-pluginVendor:Sun Microsystems, Inc.
nsslapd-pluginId:NSUniqueAttr
nsslapd-pluginInitfunc:NSUniqueAttr_Init
nsslapd-pluginEnabled: on or off
...
^Dコマンドのこの部分では、plug-in_name に、cn=mail uniqueness など属性の名前を含んだ、短くわかりやすい名前を付ける必要があります。サーバーの再起動時に、新しいインスタンスの有効化状態を on または off に指定します。
- コマンドの残りの部分では、一意性を適用するサブツリーの指定方法に従って、プラグイン引数を指定します。
- 1 つ以上のサブツリーをベース DN に基づいて定義するには、1 番目の引数に一意の値を持つ属性の名前を指定し、2 番目以降の引数にサブツリーのベースエントリの完全 DN を指定する必要があります。
nsslapd-pluginarg0: attribute_name
nsslapd-pluginarg1: subtreeBaseDN
nsslapd-pluginarg2: subtreeBaseDN
...
^D- ベースエントリのオブジェクトクラスに基づいてサブツリーを定義するには、1 番目の引数に attribute=attribute_name を追加して、一意の値を持つ属性の名前を指定する必要があります。2 番目の引数には、一意性を適用するサブツリーのベースエントリを決める baseObjectClass を指定する必要があります。オプションとして、3 番目の引数に entryObjectClass を指定すると、このオブジェクトクラスを持つエントリをターゲットとする操作だけで、一意性を適用することもできます。
nsslapd-pluginarg0: attribute=attribute_name
nsslapd-pluginarg1: markerObjectClass=baseObjectClass
nsslapd-pluginarg2: requiredObjectClass=entryObjectClass
^Dすべてのプラグイン引数に、= 記号の前後に空白を挿入することはできません。
- サーバーを再起動して、一意性検査プラグインの新しいインスタンスをサーバーに読み込みます。
レプリケーション使用時の一意性検査プラグインの使用UID 一意性検査プラグインでは、レプリケーションの一部として更新処理が行われた場合は、属性値の検査は一切行われません。これはシングルマスターレプリケーションには影響を与えませんが、プラグインはマルチマスターレプリケーションに対する属性の一意性を自動的に適用できません。
シングルマスターレプリケーションモデル
クライアントアプリケーションによる変更処理はすべてマスターレプリカ上で行われるので、UID 一意性検査プラグインをマスターサーバー上で有効にする必要があります。レプリケートされたサフィックスで一意性を適用するように、プラグインを設定する必要があります。マスターが該当の属性値が一意であることを確認するため、コンシューマサーバー上でプラグインを有効にする必要はありません。
シングルマスターのコンシューマ上で UID 一意性検査プラグインを有効にしても、レプリケーションや通常のサーバー操作と干渉することはありません。ただし、パフォーマンスがわずかに低下することがあります。
マルチマスターレプリケーションモデル
UID 一意性検査プラグインは、マルチマスターレプリケーションモデルでの使用を想定して設計されていません。マルチマスターレプリケーションは疎整合型のレプリケーションモデルを使用するので、両方のサーバーでプラグインが有効になっていても、同じ属性値が両方のサーバーに同時に追加された場合は検出されません。
ただし、次の条件では、UID 一意性検査プラグインを使用できます。
これらの条件を満たしている場合、一意性に関する競合は、レプリケーション時のネーミング競合として報告されます。ただし、レプリケーション時のネーミング競合は、手動で解決する必要があります。レプリケーション時の競合の解決方法については、「よく発生するレプリケーションの競合の解決」を参照してください。