ヘッダーをスキップ
Oracle Fusion Middleware Oracle Internet Directory管理者ガイド
11gリリース1(11.1.1)
B55919-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

17 属性一意性制約エントリの管理

この章では、Oracle Internet Directoryの属性一意性について説明します。内容は次のとおりです。

17.1 属性一意性制約エントリの管理の概要

LDAPツールを使用する場合、属性一意性機能は、属性値の追加時および変更時に属性値が重複しないようにします。たとえば、すでに別の従業員に割り当てられている識別子を新しい従業員に割り当てることを防止します。かわりに、ディレクトリ・サーバーは操作を中止し、エラー・メッセージを返します。

次の対象に属性一意性を定義できます。


注意:

LDAPツールでは、属性一意性がサポートされます。バルク・ツールではサポートされません。

属性一意性を実装するには、表17-1に示す属性の値を指定する属性一意性制約エントリを作成します。

属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContextの下に格納されます。

表17-1 属性一意性制約エントリ

属性名 必須 有効値 デフォルト値 デフォルト有効範囲

orcluniqueattrname

任意の文字列

該当なし

該当なし

orcluniquescope

×

次のいずれかの値

  • base: ルート・エントリのみを検索

  • onelevel: 1レベルのみを検索

  • sub: ディレクトリ全体を検索

sub

ディレクトリ全体を検索

orcluniqueenable

×

0(無効)または1(有効)

0

属性一意性を無効化

orcluniquesubtree

×

任意の文字列

" "

ディレクトリ全体を検索

orcluniqueobjectclass

×

任意の文字列

" "

すべてのオブジェクト・クラスを検索


エントリを作成し、属性を指定した場合、ディレクトリ・サーバーは、エントリに対する操作を実行する前に次のことを行います。

監視対象の属性、接尾辞またはオブジェクト・クラスに操作を適用して、2つのエントリに同じ属性値が含まれた場合、ディレクトリ・サーバーは操作を中止し、制約違反エラー・メッセージをクライアントに返します。


注意:

属性一意性機能は、索引付き属性でのみ機能します。

属性一意性制約がOracle Internet Directoryレプリケーション環境にある場合は、各サーバーでの属性一意性制約の構成は慎重に行ってください。

この項の項目は次のとおりです。

単純なレプリケーション使用例

クライアント・アプリケーションによる変更はすべてサプライヤ・サーバーで実行されます。したがって、サプライヤ・サーバーの属性一意性制約を使用可能に設定してください。コンシューマ・サーバーで属性一意性制約を使用可能にする必要はありません。コンシューマ・サーバーの属性一意性制約を使用可能にしても、ディレクトリ・サーバーの正しい動作を妨害することはありませんが、パフォーマンスが低下する可能性があります。

マルチマスター・レプリケーション使用例

マルチマスター・レプリケーション使用例では、ノードが同じレプリカのサプライヤとコンシューマの両方として機能します。マルチマスター・レプリケーションでは、ゆるやかな一貫性を持つレプリケーション・モデルを使用します。

1台のサーバーの属性一意性制約を使用可能にしても、指定された時間に両方のマスターで属性値が一意であることは保証されません。1台のサーバーのみで属性一意性制約を使用可能にすると、各レプリカに保持されているデータに不整合が発生する可能性があります。

属性一意性制約は、両方のマスターで使用可能にする必要があります。ただし、それでも不整合な状態になる可能性があります。たとえば、両方のマスターで、それぞれのエントリを同じ属性値に変更することができます。ただし、後で変更が別のノードにレプリケートされる際、競合が明白になります。この種の競合解消も考慮する必要があります。競合解消がレプリケーション・サーバー側の問題によるものであるかどうかを調査してください。

17.2 属性一意性制約エントリの指定

属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContextの下に格納されます。

この項では、属性一意性制約の作成時に適用される規則について、例を使用して説明します。内容は次のとおりです。

この項の例を理解するには、図17-1を参照してください。

図17-1 ディレクトリ情報ツリーの例

図17-1の説明が続きます。
「図17-1 ディレクトリ情報ツリーの例」の説明

17.2.1 属性一意性制約での複数の属性名の指定

複数の属性一意性制約でorcluniqueattrnameの値が異なる場合、その影響は互いに無関係です。

たとえば、ユーザーが、次のような2つの属性一意性制約を定義するとします。

制約1:

orcluniqueattrname: employee_id

制約2:

orcluniqueattrname: email_id

この例で、制約1と制約2は、それぞれの属性一意性の有効範囲内で指定された属性に対して一意性を適用します。制約1と制約2は、互いに無関係です。

17.2.2 属性一意性制約での複数のサブツリーの指定

複数の属性一意性制約で、orcluniqueattrnameorcluniquescopeおよびorcluniqueobjectclassの値が同一で、orcluniquesubtreeの値が異なる場合は、それらの属性一意性制約で指定されたサブツリーの有効範囲が個々にチェックされます。

たとえば、図17-1を参照してください。ユーザーが、次のような2つの属性一意性制約を定義するとします。

制約1:

orcluniqueattrname: employee_id
orcluniquesubtree: o=sales, c=us, cn=root
orcluniquescope: onelevel

制約2:

orcluniqueattrname: employee_id
orcluniquesubtree: o=hr, c=euro, cn=root
orcluniquescope: onelevel

この例で、employee_idの属性一意性は、サブツリーo=sales,c=us,cn=rootの下にあるすべてのエントリに対して適用されます。employee_idの属性一意性は、サブツリーo=sales,c=us,cn=rootの下にあるエントリとは関係なく、サブツリーo=hr,c=euro,cn=rootの下にあるすべてのエントリに対して適用されます。ディレクトリ・サーバーは、employee_id属性の一意の値をemployee3およびemployee4に対して適用します。一方、employee7とemployee8にも一意のemployee_idが適用されますが、employee7はemployee4と同じemployee_idを持つ場合があります。

17.2.3 属性一意性制約での複数の有効範囲の指定

複数の属性一意性制約で、orcluniqueattrnameorcluniquesubtreeおよびorcluniqueobjectclassの値が同一で、orcluniquescopeの値が異なる場合は、有効範囲が最大の属性一意性制約が有効になります。

たとえば、図17-1で、ユーザーが、次のような2つの属性一意性制約を定義するとします。

制約1:

orcluniqueattrname: employee_id
orcluniquesubtree: c=us, cn=root
orcluniquescope: onelevel

制約2:

orcluniqueattrname: employee_id
orcluniquesubtree: c=us, cn=root
orcluniquescope: sub

この例で、employee_idの属性一意性は、サブツリーc=us,cn=rootの下にあるすべてのエントリおよびエントリc=us,cn=root自体に対して適用されます。これは、ユーザーが制約2のみを定義した場合も同様であることに注意してください。

17.2.4 属性一意性制約での複数のオブジェクト・クラスの指定

複数の属性一意性制約で、orcluniqueattrnameorcluniquesubtreeおよびorcluniquescopeの値が同一で、orcluniqueobjectclassの値が異なる場合は、それらのオブジェクト・クラスに属する属性を結合したものがチェックされます。

たとえば、図17-1を参照してください。ユーザーが、次のような2つの属性一意性制約を定義するとします。

制約1:

orcluniqueattrname: employee_id
orcluniquesubtree: c=us, cn=root
orcluniqueobjectclass: person

制約2:

orcluniqueattrname: employee_id
orcluniquesubtree: c=us, cn=root

この例で、employee_idの属性一意性は、エントリが属するオブジェクト・クラスに関係なく、サブツリーc=us,cn=rootの下にあるすべてのエントリと、エントリc=us,cn=root自体に対して適用されます。制約2はorcluniqueobjectclass属性を指定していません。これはすべてのオブジェクト・クラスを指定した場合と同じです。

17.2.5 属性一意性制約での複数のサブツリー、有効範囲およびオブジェクト・クラスの指定

複数の属性一意性制約で、orcluniqueattrnameの値が同一で、orcluniquesubtreeorcluniquescopeおよびorcluniqueobjectclassの値が異なる場合は、異なる制約の属性一意性の有効範囲に属するエントリが個々にチェックされます。

たとえば、図17-1で、ユーザーが、次のような2つの属性一意性制約を定義するとします。

制約1:

orcluniqueattrname: employee_id
orcluniquesubtree: o=sales, c=us, cn=root
orcluniquescope: onelevel
orcluniqueobjectclass: person

制約2:

orcluniqueattrname: employee_id
orcluniquesubtree: c=euro, cn=root
orcluniquescope: sub
orcluniqueobjectclass: organization

この例で、employee_idの属性一意性は、次のそれぞれに対して互いに無関係に適用されます。

  • オブジェクト・クラスがpersonであるエントリo=sales,c=us,cn=rootの1レベル下のすべてのエントリ

  • オブジェクト・クラスがorganizationであるサブツリーc=euro,cn=rootの下のすべてのエントリおよびエントリc=euro,cn=root自体

17.3 Oracle Directory Services Managerを使用した属性一意性制約エントリの管理

属性一意性制約ポリシーは、Oracle Directory Services Managerを使用して管理できます。

17.3.1 Oracle Directory Services Managerを使用した属性一意性制約エントリの作成

  1. 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。

  2. タスク選択バーで、「拡張」を選択します。

  3. 左側のペインで「属性一意性」を展開します。

  4. ツールバーの「属性一意性制約の作成」アイコンを選択します。「新規制約」ウィンドウが表示されます。

  5. 「新規制約」ダイアログ・ボックスで、テキスト・フィールドに値を入力し、「一意属性の有効範囲」を選択します。「参照」をクリックすると「一意属性のサブツリー」を選択できます。

  6. ここで制約を有効化する場合、「一意属性の有効化」をクリックします。

  7. 「OK」を選択します。作成したエントリが、左側のパネルの属性一意性制約エントリのリストに表示されます。

  8. 「適用」をクリックしてこの制約を適用するか、「元に戻す」をクリックして新規エントリの作成前の状態に戻します。

17.3.2 Oracle Directory Services Managerを使用した属性一意性制約エントリの変更

  1. 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。

  2. タスク選択バーで、「拡張」を選択します。

  3. 左側のペインで「属性一意性」を展開します。

  4. 既存の一意性制約を選択します。これにより、属性一意性制約ウィンドウの「一般」タブが表示されます。

  5. 値を入力または変更します。

  6. ここで制約を有効化する場合、「一意属性の有効化」をクリックします。

  7. 「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの変更前の状態に戻します。

17.3.3 Oracle Directory Services Managerを使用した属性一意性制約エントリの削除

属性一意性制約ポリシーを削除する手順は次のとおりです。

  1. 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。

  2. タスク選択バーで、「拡張」を選択します。

  3. 左側のペインで「属性一意性」を展開します。

  4. 左側のパネルで、削除する属性一意性制約エントリを選択します。

  5. 「削除」アイコンを選択し、確認を求めるプロンプトで削除を確認します。削除したエントリは、左側のパネルの属性一意性制約エントリのリストに表示されなくなります。

  6. 「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの削除前の状態に戻します。

17.4 コマンドラインを使用した属性一意性制約エントリの管理

属性一意性制約ポリシーは、コマンドラインを使用して管理できます。

17.4.1 コマンドライン・ツールを使用したディレクトリ全体を対象とする属性一意性の作成

ディレクトリ全体を対象とする属性一意性のインスタンスを作成するには、値の一意性を適用する属性名を指定します。

たとえば、MyCompanyの米国の全従業員に対して一意の従業員識別子を作成する手順は、次のとおりです。

  1. 次のように、属性一意性制約エントリを(LDIFフォーマットで)作成します。

    dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext
    objectclass: orclUniqueConfig
    orcluniqueattrname: employeenumber
    orcluniquesubtree: o=MyCompany, c=US
    orcluniqueobjectclass: person
    
  2. 次のような属性一意性制約エントリをロードして、属性一意性機能を適用します。

    ldapadd –h host -p port -D DN -q -f constraint1.ldif
    
  3. ディレクトリ・サーバーを再起動します。


注意:

orclcommonusernickname属性に一意性制約を指定するには、次のLDIFテンプレート・ファイルを使用します。
ORACLE_HOME/ldap/schema/OID/uniquenessConstraint.ldif

17.4.2 コマンドライン・ツールを使用した1つのサブツリーを対象とする属性一意性の作成

1つ以上のサブツリーを対象とする属性一意性のインスタンスを作成するには、次の項目を指定します。

  • 値の一意性を適用する属性名

  • 一意性制約を適用するサブツリーの位置

たとえば、MyCompanyがSubscriberCompany1とSubscriberCompany2をホスティングしていて、SubscriberCompany1のみに従業員識別子属性の一意性を適用するとします。uid=dlin,ou=people,o=SubscriberCompany1,dc=MyCompany,dc=comなどのエントリを追加する場合は、o=SubscriberCompany1,dc=MyCompany,dc=comサブツリーでのみ一意性を適用する必要があります。これを行うには、属性一意性制約の構成で、サブツリーの識別名を明示的に列挙します。

この場合、LDIFファイルは次のようになります。

dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext
objectclass: orclUniqueConfig
orcluniqueattrname: employeenumber
orcluniquesubtree: o=SubscriberCompany1,dc=MyCompany,     dc=com

17.4.3 コマンドライン・ツールを使用した1つのオブジェクト・クラスを対象とする属性一意性の作成

1つのオブジェクト・クラスを対象とする属性一意性のインスタンスを作成するには、次の項目を指定します。

  • 値の一意性を適用する属性名

  • オブジェクト・クラス名

この場合、LDIFファイルは次のようになります。

dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext
objectclass: orclUniqueConfig
orcluniqueattrname: employeenumber
orcluniqueobjectclass: person

ldapaddを使用してエントリを追加します。

ldapadd -D "cn=orcladmin" -q -p port -D user -f file_name

17.4.4 コマンドライン・ツールを使用した属性一意性制約エントリの変更

属性一意性エントリを変更するには、エントリのLDIFファイルを作成し、その後ldapmodifyを使用してそのファイルをディレクトリにアップロードします。

たとえば、次のような既存の属性一意性制約エントリがあるとします。

dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext
objectclass: orclUniqueConfig
orcluniqueattrname: employeenumber
orcluniquesubtree: o=MyCompany, c=US
orcluniqueobjectclass: person

この制約をo=MyCompanyではなくc=USに適用する手順は、次のとおりです。

  1. LDIFエントリを作成して、orcluniquenesssubtreeエントリを次のように変更します。

    dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext
    changetype: modify
    replace: orcluniquesubtree
    orcluniquesubtree: o=Oracle Corporation, c=US
    
  2. ldapmodifyを使用して、この変更をディレクトリ・サーバーに適用します。

    ldapmodify -D "cn=orcladmin" -q -p port -D user -f file_name
    
  3. ディレクトリ・サーバーを再起動して、この変更を有効にします。

17.4.5 コマンドライン・ツールを使用した属性一意性制約エントリの削除

属性一意性制約ポリシーを削除するには、ldapdeleteコマンドライン・ツールを使用します。

  1. ldapdeleteを使用して、ディレクトリから属性一意性制約エントリを削除します。

    ldapdelete -D "cn=orcladmin" -q -p port -D bind_DN \
     "cn=constraint1,cn=unique,cn=common,cn=products,cn=oraclecontext"
    
  2. ディレクトリ・サーバーを再起動して、この変更を有効にします。

17.4.6 コマンドライン・ツールを使用した属性一意性の有効化と無効化

既存の属性一意性制約エントリに対する属性一意性を有効または無効にできます。

既存の属性一意性制約エントリに対する属性一意性を有効にする手順は、次のとおりです。

  1. ldapmodifyを使用して、orcluniqueenable属性を1に設定します。

  2. ディレクトリ・サーバーを再起動して、ポリシーを有効にします。

属性一意性を無効化する手順は、次のとおりです。

  1. ldapmodifyを使用して、orcluniqueenable属性を0に設定します。

  2. ディレクトリ・サーバーを再起動して、ポリシーを無効にします。