Oracle Fusion Middleware Oracle Internet Directory管理者ガイド 11g リリース1(11.1.1) B55919-02 |
|
前 |
次 |
この章では、Oracle Internet Directoryの属性一意性について説明します。この項の内容は、次のとおりです。
LDAPツールを使用する場合、属性一意性機能は、属性値の追加時および変更時に属性値が重複しないようにします。たとえば、すでに別の従業員に割り当てられている識別子を新しい従業員に割り当てることを防止します。かわりに、ディレクトリ・サーバーは操作を中止し、エラー・メッセージを返します。
次の対象に属性一意性を定義できます。
ディレクトリ全体
たとえば、mail
属性を持つディレクトリ内のすべてのエントリが、その属性に対して一意の値を持つようにするには、mail
と関連付けられた属性一意性のインスタンスを作成します。
属性ごとの1つのサブツリー全体
たとえば、MyCompanyがSubscriberCompany1とSubscriberCompany2用のディレクトリをホスティングしているとします。SubscriberCompany1のみに属性一意性を適用することを選択できます。
1つのオブジェクト・クラス全体
たとえば、ID
が、machine
オブジェクト・クラスとperson
オブジェクト・クラスの両方で属性になっているとします。属性一意性を有効にすると、ディレクトリ・サーバーは、同じID
を持つ2台のマシンまたは2人のユーザーの追加を防止します。ただし、既存のperson
のID
属性と同じ値を持つmachine
のID
属性を追加することはできます。同様に、既存のmachine
のID
属性を同じ値を持つperson
のID
属性を追加できます。
注意: LDAPツールでは、属性一意性がサポートされます。バルク・ツールではサポートされません。 |
属性一意性を実装するには、表18-1に示す属性の値を指定する属性一意性制約エントリを作成します。
属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContext
の下に格納されます。
表18-1 属性一意性制約エントリ
属性名 | 必須 | 有効値 | デフォルト値 | デフォルト有効範囲 |
---|---|---|---|---|
◎ |
任意の文字列 |
該当なし |
該当なし |
|
× |
次のいずれかの値
|
|
ディレクトリ全体を検索 |
|
× |
|
|
属性一意性を無効化 |
|
× |
任意の文字列 |
|
ディレクトリ全体を検索 |
|
× |
任意の文字列 |
|
すべてのオブジェクト・クラスを検索 |
エントリを作成し、属性を指定した場合、ディレクトリ・サーバーは、エントリに対する操作を実行する前に次のことを行います。
属性一意性制約を使用したすべての更新操作のチェック
監視対象の属性、サブツリーまたはオブジェクト・クラスに操作を適用するかどうかの決定
監視対象の属性、接尾辞またはオブジェクト・クラスに操作を適用して、2つのエントリに同じ属性値が含まれた場合、ディレクトリ・サーバーは操作を中止し、制約違反エラー・メッセージをクライアントに返します。
注意: 属性一意性機能は、索引付き属性でのみ機能します。 |
属性一意性制約がOracle Internet Directoryレプリケーション環境にある場合は、各サーバーでの属性一意性制約の構成は慎重に行ってください。
この項の項目は次のとおりです。
単純なレプリケーション使用例
クライアント・アプリケーションによる変更はすべてサプライヤ・サーバーで実行されるため、サプライヤ・サーバーで属性一意性制約を使用可能にしてください。コンシューマ・サーバーで属性一意性制約を使用可能にする必要はありません。コンシューマ・サーバーで属性一意性制約を使用可能にした場合、ディレクトリ・サーバーの正しい動作を妨害することはありませんが、パフォーマンスが低下する可能性があります。
マルチマスター・レプリケーション使用例
マルチマスター・レプリケーション使用例では、ノードが同じレプリカのサプライヤとコンシューマの両方として機能します。マルチマスター・レプリケーションでは、ゆるやかな一貫性を持つレプリケーション・モデルを使用します。
1台のサーバーの属性一意性制約を使用可能にしても、指定された時間に両方のマスターで属性値が一意であることは保証されません。1台のサーバーのみで属性一意性制約を使用可能にすると、各レプリカに保持されているデータに不整合が発生する可能性があります。
属性一意性制約は、両方のマスターで使用可能にする必要があります。ただし、それでも不整合な状態になる可能性があります。たとえば、両方のマスターで、それぞれのエントリを同じ属性値に変更することができます。ただし、後で変更が別のノードにレプリケートされるときに、この競合が表面化します。この種の競合解消も考慮する必要があります。競合解消をレプリケーション・サーバー側の責任とするかどうかを判断してください。
属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContext
の下に格納されます。
この項では、属性一意性制約の作成時に適用される規則について、例を使用して説明します。この項の内容は、次のとおりです。
この項の例を理解するには、図18-1を参照してください。
複数の属性一意性制約でorcluniqueattrname
の値が異なる場合、その影響は互いに無関係です。
たとえば、ユーザーが、次のような2つの属性一意性制約を定義するとします。
制約1:
orcluniqueattrname: employee_id
制約2:
orcluniqueattrname: email_id
この例で、制約1と制約2は、それぞれの属性一意性の有効範囲内で指定された属性に対して一意性を適用します。制約1と制約2は、互いに無関係です。
複数の属性一意性制約で、orcluniqueattrname
、orcluniquescope
およびorcluniqueobjectclass
の値が同一で、orcluniquesubtree
の値が異なる場合は、それらの属性一意性制約で指定されたサブツリーの有効範囲が個々にチェックされます。
たとえば、図18-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
を持つ場合があります。
複数の属性一意性制約で、orcluniqueattrname
、orcluniquesubtree
およびorcluniqueobjectclass
の値が同一で、orcluniquescope
の値が異なる場合は、有効範囲が最大の属性一意性制約が有効になります。
たとえば、図18-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
のみを定義した場合も同様であることに注意してください。
複数の属性一意性制約で、orcluniqueattrname
、orcluniquesubtree
およびorcluniquescope
の値が同一で、orcluniqueobjectclass
の値が異なる場合は、それらのオブジェクト・クラスに属する属性を結合したものがチェックされます。
たとえば、図18-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
属性を指定していません。これはすべてのオブジェクト・クラスを指定した場合と同じです。
複数の属性一意性制約で、orcluniqueattrname
の値が同一で、orcluniquesubtree
、orcluniquescope
およびorcluniqueobjectclass
の値が異なる場合は、異なる制約の属性一意性の有効範囲に属するエントリが個々にチェックされます。
たとえば、図18-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
自体
属性一意性制約ポリシーは、Oracle Directory Services Managerを使用して管理できます。
「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
タスク選択バーで、「拡張」を選択します。
左側のペインで「属性一意性」を展開します。
ツールバーの「属性一意性制約の作成」アイコンを選択します。「新規制約」ウィンドウが表示されます。
「新規制約」ダイアログ・ボックスで、テキスト・フィールドに値を入力し、「一意属性の有効範囲」を選択します。「参照」をクリックすると「一意属性のサブツリー」を選択できます。
ここで制約を有効化する場合、「一意属性の有効化」をクリックします。
「OK」を選択します。作成したエントリが、左側のパネルの属性一意性制約エントリのリストに表示されます。
「適用」をクリックしてこの制約を適用するか、「元に戻す」をクリックして新規エントリの作成前の状態に戻します。
「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
タスク選択バーで、「拡張」を選択します。
左側のペインで「属性一意性」を展開します。
既存の一意性制約を選択します。これにより、属性一意性制約ウィンドウの「一般」タブが表示されます。
値を入力または変更します。
ここで制約を有効化する場合、「一意属性の有効化」をクリックします。
「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの変更前の状態に戻します。
属性一意性制約ポリシーを削除する手順は次のとおりです。
「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
タスク選択バーで、「拡張」を選択します。
左側のペインで「属性一意性」を展開します。
左側のパネルで、削除する属性一意性制約エントリを選択します。
「削除」アイコンを選択し、確認を求めるプロンプトで削除を確認します。削除したエントリは、左側のパネルの属性一意性制約エントリのリストに表示されなくなります。
「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの削除前の状態に戻します。
属性一意性制約ポリシーは、コマンドラインを使用して管理できます。
ディレクトリ全体を対象とする属性一意性のインスタンスを作成するには、値の一意性を適用する属性名を指定します。
たとえば、MyCompanyの米国の全従業員に対して一意の従業員識別子を作成する手順は、次のとおりです。
次のように、属性一意性制約エントリを(LDIFフォーマットで)作成します。
dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext objectclass: orclUniqueConfig orcluniqueattrname: employeenumber orcluniquesubtree: o=MyCompany, c=US orcluniqueobjectclass: person
次のような属性一意性制約エントリをロードして、属性一意性機能を適用します。
ldapadd –h host -p port -D DN -q -f constraint1.ldif
ディレクトリ・サーバーを再起動します。
例:
次のLDIFファイルuniquenessConstraint.ldif
によって、一意性制約をorclcommonusernickname
属性に指定します。
# Use this LDIF file to set up a uniqueness constraint on the nickname # attribute within the user search base. # Before running the script, change the following parameters in the LDIF file. # <userid_attribute> - Specify the name of the attribute that holds the user # id. This value should be the same as the orclcommonusernickname attribute # configured for the realm.# <dn _f_user_serach_base> - Specify the user search base in which the # uniqueness constraint should be enforced. # dn: cn=<userid_attribute> ,cn=unique,cn=common,cn=Products, cn=OracleContext changetype: add objectclass: orclUniqueConfig orcluniqueattrname: <userid _ttribute> orcluniquesubtree: <dn_of_user_search_base> orcluniqueenable: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
1つのオブジェクト・クラスを対象とする属性一意性のインスタンスを作成するには、次の項目を指定します。
値の一意性を適用する属性名
オブジェクト・クラス名
この場合、LDIFファイルは次のようになります。
dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext objectclass: orclUniqueConfig orcluniqueattrname: employeenumber orcluniqueobjectclass: person
ldapadd -D "cn=orcladmin" -q -p port -D user -f file_name
属性一意性エントリを変更するには、エントリの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
に適用する手順は、次のとおりです。
LDIFエントリを作成して、orcluniquenesssubtree
エントリを次のように変更します。
dn: cn=constraint1, cn=unique, cn=common, cn=products, cn=oraclecontext changetype: modify replace: orcluniquesubtree orcluniquesubtree: o=Oracle Corporation, c=US
ldapmodify
を使用して、この変更をディレクトリ・サーバーに適用します。
ldapmodify -D "cn=orcladmin" -q -p port -D user -f file_name
ディレクトリ・サーバーを再起動して、この変更を有効にします。
属性一意性制約ポリシーを削除するには、ldapdelete
コマンドライン・ツールを使用します。
ldapdeleteを使用して、ディレクトリから属性一意性制約エントリを削除します。
ldapdelete -D "cn=orcladmin" -q -p port -D bind_DN \ "cn=constraint1,cn=unique,cn=common,cn=products,cn=oraclecontext"
ディレクトリ・サーバーを再起動して、この変更を有効にします。