UID 一意性検査プラグインによって、特定の属性の値をディレクトリまたはサブツリーのすべてのエントリ内で一意にできます。プラグインは、特定の属性に対して既存の値を含むエントリを追加しようとする動作を停止します。また、ディレクトリにすでに存在する値に属性を変更したり、追加する動作を停止します。
UID 一意性検査プラグインはデフォルトでは無効になっています。有効にすると、デフォルトで UID 属性の一意性を確認します。プラグインの新しいインスタンスを作成して、その他の属性値を一意にすることができます。UID 一意性検査プラグインが属性値の一意性を確認できるのは、1 つのサーバー上だけです。
この章の内容は次のとおりです。
UID 一意性検査プラグインは、操作前のプラグインです。サーバーがディレクトリの更新を実行する前に、LDAP の追加、変更、DN の変更操作を確認します。プラグインは、操作によって 2 つのエントリが同じ属性値を持つかどうかを判断します。同じ属性を持つ場合、サーバーは操作を停止して、エラー 19 LDAP_CONSTRAINT_VIOLATION をクライアントに返します。
このプラグインは、ディレクトリ内の 1 つ以上のサブツリーや、特定のオブジェクトクラスのエントリ間で、一意性を確保するように設定できます。この設定により、属性値を一意にするエントリのセットが決まります。
他の属性の一意性を確保する必要がある場合は、UID 一意性検査プラグインの複数のインスタンスを定義します。値を一意にする属性ごとに 1 つのプラグインインスタンスを定義します。同じ属性に複数のプラグインインスタンスを用意することで、複数のエントリセットでその属性の一意性を個別に確保できます。サブツリーの各セットで特定の属性値は 1 回しか許可されません。
既存のディレクトリで属性値の一意性を有効にしても、サーバーは既存のエントリ間での一意性をチェックしません。一意性が適用されるのは、エントリを追加する時点、あるいは属性が追加または変更される時点です。
デフォルトでは、UID 一意性検査プラグインは無効になっています。これは、このプラグインがマルチマスターレプリケーションに影響を与えるためです。レプリケーションの使用時に UID 一意性検査プラグインを有効にできますが、「レプリケーション使用時の一意性検査プラグインの使用」で説明している動作に気を付けてください。
この 節では、uid 属性に対するデフォルトの一意性検査プラグインを有効にして、設定する方法と、その他の属性の一意性を適用する方法について説明します。
dsconf コマンドを使用して UID 一意性検査プラグインを有効にし、設定する方法について、次の手順で説明します。プラグイン設定エントリの DN は、cn=uid uniqueness,cn=plugins,cn=config です。
このタスクは DSCC を使用して実行することができます。詳細については、「Directory Service Control Center のインタフェース」および DSCC オンラインヘルプを参照してください。
DSCC の使用時には、デフォルトの UID 一意性検査プラグインを変更して、別の属性の一意性を適用しないでください。UID 一意性検査プラグインを使用しない場合は、プラグインを無効にしたまま、「その他の属性の一意性を適用する」での説明に従って、ほかの属性に対して新しいプラグインインスタンスを作成します。
プラグインを有効にします。
$ dsconf enable-plugin -h host -p port "uid uniqueness" |
一意性を適用するサブツリーの指定方法に従って、プラグイン引数を変更します。
1 つのサブツリーのベース DN を指定するには、次のように入力します。
$ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid argument:subtreeBaseDN |
次に例を示します。
$ dsconf set-plugin-prop -h host1 -p 1389 "uid uniqueness" argument:uid \ argument:dc=People,dc=example,dc=com |
複数のサブツリーを指定するには、各サブツリーの完全ベース DN を値として指定した引数を追加します。
$ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid \ argument:subtreeBaseDN argument:subtreeBaseDN |
ベースエントリのオブジェクトクラスに従ってサブツリーを指定するには、引数に次の値を設定します。baseObjectClass を持つ各エントリの下位にあるサブツリーに対して、UID 属性の一意性が適用されます。オプションとして、3 番目の引数に entryObjectClass を指定すると、このオブジェクトクラスを持つエントリをターゲットとする操作だけで、一意性を適用することもできます。
$ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:attribute=uid \ argument:markerObjectClass=baseObjectClass argument:entryObjectClass=baseObjectClass |
既存の引数リストに引数を追加するには、次のコマンドを使用します。
$ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument+:argument-value |
変更内容を有効にするために、サーバーを再起動します。
UID 一意性検査プラグインを使用すると、すべての属性の一意性を適用できます。ディレクトリの cn=plugins,cn=config の下に新しいエントリを作成することによって、プラグインの新しいインスタンスを作成する必要があります。
DSCC を使用してこのタスクを実行することはできません。次の手順に示すように、コマンド行を使用します。
新しいプラグインを作成します。
$ dsconf create-plugin -h host -p port -H lib-path -F init-func \ -Y type plugin-name |
plugin-name は、属性名を含む短い説明的な名前にしてください。たとえば、メール ID 属性の一意性のためにプラグインを作成するには、次のコマンドを使用します。
$ dsconf create-plugin -h host1 -p 1389 -H /opt/SUNWdsee/ds6/lib/uid-plugin.so \ -F NSUniqueAttr_Init -Y preoperation "mail uniqueness" |
プラグインのプロパティーを設定します。
$ dsconf set-plugin-prop -h host -p port plugin-name property:value |
たとえば、メールの一意性検査プラグインのプロパティーを設定するには、次のように入力します。
$ dsconf set-plugin-prop -h host1 -p 1389 "mail uniqueness" \ desc:"Enforce unique attribute values..." version:6.0 \ vendor:"Sun Microsystems, Inc." depends-on-type:database |
プラグインを有効にします。
$ dsconf enable-plugin -h host -p port plugin-name |
プラグインの引数を指定します。
これらの引数は、一意性が適用されるサブツリーの決定方法によって異なります。
ベース DN に従って 1 つまたは複数のサブツリーを定義するには、最初の引数は一意の値を持つ属性の名前である必要があります。その後の引数は、サブツリーのベースエントリの完全な DN です。
$ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute-name \ argument:subtreeBaseDN argument:subtreeBaseDN... |
既存の引数リストに引数を追加するには、次のコマンドを使用します。
$ dsconf set-plugin-prop -h host -p port plugin-name argument+:argument-value |
ベースエントリのオブジェクトクラスに基づいてサブツリーを定義するには、1 番目の引数に attribute= attribute-name を追加して、一意の値を持つ属性の名前を指定する必要があります。2 番目の引数には、一意性を適用するサブツリーのベースエントリを決める baseObjectClass を指定する必要があります。オプションとして、3 番目の引数に entryObjectClass を指定すると、このオブジェクトクラスを持つエントリをターゲットとする操作だけで、一意性を適用することもできます。
$ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute=attribute-name \ argument:markerObjectClass=baseObjectClass argument:requiredObjectClass=entryObjectClass |
すべてのプラグインの引数で、 = 記号の前後に空白文字を入れることはできません。
変更内容を有効にするために、サーバーを再起動します。
UID 一意性検査プラグインでは、レプリケーションの一部として更新処理が行われた場合は、属性値の検査は一切行われません。これはシングルマスターレプリケーションには影響を与えませんが、プラグインはマルチマスターレプリケーションに対する属性の一意性を自動的に適用できません。
クライアントアプリケーションによる変更処理はすべてマスターレプリカ上で行われるので、UID 一意性検査プラグインをマスターサーバー上で有効にする必要があります。レプリケートされたサフィックスで一意性を適用するように、プラグインを設定する必要があります。マスターが該当の属性値が一意であることを確認するため、コンシューマサーバー上でプラグインを有効にする必要はありません。
1 つのマスターのコンシューマ上で UID 一意性検査プラグインを有効にしても、レプリケーションやサーバーの通常の操作には影響しません。しかし、パフォーマンスは若干低下する場合があります。
UID 一意性検査プラグインは、マルチマスターレプリケーションモデルでの使用を想定して設計されていません。マルチマスターレプリケーションは疎整合型のレプリケーションモデルを使用するので、両方のサーバーでプラグインが有効になっていても、同じ属性値が両方のサーバーに同時に追加された場合は検出されません。
ただし、一意性検査を実行している属性がネーミング属性であり、一意性検査プラグインがすべてのマスター上の同じサブツリーの同じ属性に対して有効になっている場合、UID 一意性検査プラグインを使用できます。
これらの条件を満たしている場合、一意性に関する競合は、レプリケーション時のネーミング競合として報告されます。ネーミング競合は手動で解決する必要があります。詳細については、「よく発生するレプリケーションの競合の解決」を参照してください。