ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Directory Server Enterprise Edition管理者ガイド
11g リリース1 (11.1.1.7.0)
B72439-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

19 Directory Serverの属性値の一意性

UID一意性のプラグインによって、特定の属性の値をディレクトリまたはサブツリーのすべてのエントリ内で一意にできます。プラグインは、特定の属性に対して既存の値を含むエントリを追加しようとする動作を停止します。また、ディレクトリにすでに存在する値に属性を変更したり、追加する動作を停止します。

UID一意性プラグインはデフォルトでは無効となります。このプラグインを有効にした場合、uid属性の一意性がデフォルトで確保されます。プラグインの新しいインスタンスを作成して、その他の属性値を一意にできます。UID一意性プラグインにより、単一のサーバーでの属性値の一意性が確保されます。

この章の内容は、次のとおりです。

19.1 属性値の一意性の概要

UID一意性プラグインは操作前プラグインです。サーバーがディレクトリの更新を実行する前に、LDAPの追加、変更およびDN変更の各操作をチェックします。このプラグインでは、操作によって2つのエントリが同じ属性値を持つかどうかを判断します。同じ属性を持つ場合、サーバーは操作を停止して、クライアントにエラー19 LDAP_CONSTRAINT_VIOLATIONを返します。

このプラグインは、ディレクトリ内の1つ以上のサブツリーや、特定のオブジェクトクラスのエントリ間で、一意性を確保するように構成できます。この構成により、一意の属性値を適用するエントリのセットが決まります。

他の属性の一意性を確保する場合、UID一意性プラグインのインスタンスをいくつか定義できます。値を一意にする属性ごとに、1つのプラグインを定義します。同じ属性に複数のプラグイン・インスタンスを用意することで、複数のエントリ・セットでその属性の一意性を個別に確保できます。サブツリーの各セットで特定の属性値は1回しか許可されません。

既存のディレクトリで属性値の一意性を有効にしても、サーバーは既存のエントリ間での一意性をチェックしません。一意性が適用されるのは、エントリを追加する時点、あるいは属性が追加または変更される時点です。

UID一意性プラグインはマルチマスター・レプリケーションに影響を与えるため、デフォルトでは無効となっています。レプリケーションの使用時にUID一意性プラグインを有効にできますが、「レプリケーションにおける一意性プラグインの使用方法」で説明する動作に注意する必要があります。

19.2 uidとその他の属性の一意性の適用

この項では、uid属性に対するデフォルトの一意性プラグインを有効にして構成する方法と、その他の属性の一意性を適用する方法について説明します。

19.2.1 uid属性の一意性を適用するには

この手順では、dsconfコマンドを使用して、UIDの一意性プラグインを有効にし、構成する方法を説明します。プラグイン構成エントリのDNは、cn=uid uniqueness,cn=plugins,cn=configとなります。

WebインタフェースのDirectory Service Control Center (DSCC)を使用して、このタスクを実行できます。

DSCC使用時は、デフォルトのUID一意性プラグインを変更して、別の属性の一意性を適用しないでください。UID一意性プラグインを必要としない場合、このプラグインを無効のままにして、「他の属性の一意性を適用するには:」の説明どおりに、他の属性に対して新しいプラグイン・インスタンスを作成します。

  1. プラグインを有効にします。

    $ dsconf enable-plugin -h host -p port "uid uniqueness"
    
  2. 一意性を適用するサブツリーの指定方法に従い、プラグイン引数を変更します。

    • 単一サブツリーのベース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
      
  3. サーバーを再起動して、変更を有効にします。

19.2.2 他の属性の一意性を適用するには

UID一意性プラグインを使用して、任意の属性の一意性を適用できます。ディレクトリのcn=plugins,cn=configの下で新しいエントリを作成することにより、プラグインの新しいインスタンスを作成する必要があります。

このタスクの実行には、DSCCを使用できません。次の手順の説明に従って、コマンドラインを使用してください。

  1. 新しいプラグインを作成します。

    $ 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/SUNWdsee7/lib/sparcv9/uid-plugin.so \
     -F NSUniqueAttr_Init -Y preoperation "mail uniqueness"
    
  2. プラグインのプロパティを設定します。

    $ 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
    
  3. プラグインを有効にします。

    $ dsconf enable-plugin -h host -p port plugin-name
    
  4. プラグインの引数を指定します。

    これらの引数は、一意性が適用されるサブツリーの決定方法によって異なります。

    • ベース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
      
    • ベース・エントリのオブジェクト・クラスに従ってサブツリーを定義するには、最初の引数に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
      

    すべてのプラグイン引数で、=記号の前後に空白を入れることはできません。

  5. サーバーを再起動して、変更を有効にします。

19.3 レプリケーションにおける一意性プラグインの使用方法

レプリケーションの一環として更新が実行される際は、UID一意性プラグインでの属性値チェックは行われません。これはシングルマスター・レプリケーションには影響しませんが、プラグインではマルチマスター・レプリケーションに対して属性の一意性を自動的に適用できません。

19.3.1 シングルマスター・レプリケーションのシナリオ

クライアント・アプリケーションによる変更はすべてマスター・レプリカで実行されるため、マスター・サーバーでUID一意性プラグインを有効にする必要があります。レプリケートされた接尾辞内で一意性を適用するよう、プラグインを構成する必要があります。マスターでは目的の属性値についての一意性が保証されるので、コンシューマ・サーバーでこのプラグインを有効にする必要はありません。

シングルマスターのコンシューマでUID一意性プラグインを有効化しても、レプリケーションや通常のサーバー操作に支障はありません。ただし、パフォーマンスが若干低下する場合があります。

19.3.2 マルチマスター・レプリケーションのシナリオ

UID一意性プラグインは、マルチマスター・レプリケーション・シナリオに対応した設計にはなっていません。マルチマスター・レプリケーションでは、ゆるやかな一貫性を持つレプリケーション・モデルが使用されるので、両方のサーバーでプラグインが有効になっていても、同じ属性値が両方のサーバーに同時に追加された場合は検出されません。

ただし、一意性チェックの実行対象の属性がネーミング属性であり、かつ一意性プラグインをすべてのマスターの同じサブツリーの同じ属性に対して有効にする場合は、UID一意性プラグインを使用できます。

これらの条件が満たされている場合、レプリケーション時の名前の競合として一意性の競合が報告されます。名前の競合は手動で解決する必要があります。詳細は、「一般的なレプリケーション競合の解決」を参照してください。