19 属性一意性制約エントリの管理
この章の内容は次のとおりです。
19.1 属性一意性制約エントリの管理の概要
ディレクトリ全体、1つのサブツリー全体および1つのオブジェクト・クラス全体を対象とする属性一意性を定義できます。属性一意性を実装するには、属性一意性制約エントリを作成します。
次の各項では、これについてさらに詳しく説明しています。
19.1.1 属性一意性の有効範囲
ディレクトリ全体、1つのサブツリー全体および1つのオブジェクト・クラス全体を対象とする属性一意性を定義できます。
-
ディレクトリ全体
たとえば、
mail
属性を持つディレクトリ内のすべてのエントリが、その属性に対して一意の値を持つようにするには、mail
と関連付けられた属性一意性のインスタンスを作成します。 -
属性ごとの1つのサブツリー全体
たとえば、MyCompanyがSubscriberCompany1とSubscriberCompany2用のディレクトリをホスティングしているとします。SubscriberCompany1のみに属性一意性を適用することを選択できます。
-
1つのオブジェクト・クラス全体
たとえば、
ID
が、machine
オブジェクト・クラスとperson
オブジェクト・クラスの両方で属性になっているとします。属性一意性を有効にすると、ディレクトリ・サーバーは、同じID
を持つ2台のマシンまたは2人のユーザーの追加を防止します。ただし、既存のperson
のID
属性と同じ値を持つmachine
のID
属性を追加することはできます。同様に、既存のmachine
のID
属性を同じ値を持つperson
のID
属性を追加できます。
19.1.2 属性一意性制約エントリ
属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContext
の下に格納されます。
属性一意性を実装するには、表19-1に示す属性の値を指定する属性一意性制約エントリを作成します。
表19-1 属性一意性制約エントリ
属性名 | 必須 | 有効値 | デフォルト値 | デフォルト有効範囲 |
---|---|---|---|---|
|
はい |
任意の文字列 |
該当なし |
該当なし |
|
いいえ |
次のうちの1つ。
|
|
ディレクトリ全体を検索 |
|
いいえ |
|
|
属性一意性を無効化 |
|
いいえ |
任意の文字列 |
|
ディレクトリ全体を検索 |
|
いいえ |
任意の文字列 |
|
すべてのオブジェクト・クラスを検索 |
19.1.3 Oracle Internet Directoryレプリケーション環境の属性一意性制約
属性一意性制約がOracle Internet Directoryレプリケーション環境にある場合は、各サーバーでの属性一意性制約の構成は慎重に行ってください。
この項の内容は次のとおりです。
19.1.3.1 単純なレプリケーション環境の属性一意性制約
属性一意性制約がOracle Internet Directoryの単純なレプリケーション環境にある場合:
クライアント・アプリケーションによる変更はすべてサプライヤ・サーバーで実行されるため、サプライヤ・サーバーで属性一意性制約を使用可能にしてください。コンシューマ・サーバーで属性一意性制約を使用可能にする必要はありません。コンシューマ・サーバーで属性一意性制約を使用可能にした場合、ディレクトリ・サーバーの正しい動作を妨害することはありませんが、パフォーマンスが低下する可能性があります。
19.1.3.2 マルチマスター・レプリケーション環境の属性一意性制約
属性一意性制約がOracle Internet Directoryマルチマスター・レプリケーション環境にある場合:
マルチマスター・レプリケーション使用例では、ノードが同じレプリカのサプライヤとコンシューマの両方として機能します。マルチマスター・レプリケーションでは、ゆるやかな一貫性を持つレプリケーション・モデルを使用します。
1台のサーバーの属性一意性制約を使用可能にしても、指定された時間に両方のマスターで属性値が一意であることは保証されません。1台のサーバーのみで属性一意性制約を使用可能にすると、各レプリカに保持されているデータに不整合が発生する可能性があります。
属性一意性制約は、両方のマスターで使用可能にする必要があります。ただし、それでも不整合な状態になる可能性があります。たとえば、両方のマスターで、それぞれのエントリを同じ属性値に変更することができます。ただし、後で変更が別のノードにレプリケートされるときに、この競合が表面化します。この種の競合解消も考慮する必要があります。競合解消をレプリケーション・サーバー側の責任とするかどうかを判断してください。
19.1.4 属性一意性に対するLDAPツールのサポート
LDAPツールを使用する場合、属性一意性機能は、属性値の追加時および変更時に属性値が重複しないようにします。たとえば、すでに別の従業員に割り当てられている識別子を新しい従業員に割り当てることを防止します。かわりに、ディレクトリ・サーバーは操作を中止し、エラー・メッセージを返します。
ノート:
LDAPツールでは、属性一意性がサポートされます。バルク・ツールでは、属性一意性はサポートされていません。
エントリを作成し、属性を指定した場合、ディレクトリ・サーバーは、エントリに対する操作を実行する前に次のことを行います。
-
属性一意性制約を使用したすべての更新操作のチェック
-
モニター対象の属性、サブツリーまたはオブジェクト・クラスに操作を適用するかどうかの決定
モニター対象の属性、接尾辞またはオブジェクト・クラスに操作を適用して、2つのエントリに同じ属性値が含まれた場合、ディレクトリ・サーバーは操作を中止し、制約違反エラー・メッセージをクライアントに返します。
ノート:
属性一意性機能は、索引付き属性でのみ機能します。
19.2 重複する属性値
以前のリリースでは、属性の一意性を有効にする前にディレクトリに重複する属性値が存在した場合に、Oracle Internet Directoryサーバーではこうした重複値についてエラーをレポートしませんでした。
Oracle Internet Directory 11gリリース1(11.1.1.7.0)へのアップグレード時に、データがattr_uniqueness
表にコピーされます。このアップグレード・プロセス中に、重複する値はattr_uniqueness
表ではなくattr_uniqueness_log
表にコピーされます。
Oracle Internet Directoryの新規インストールの後、属性の一意性を有効にしたときに既存のデータも重複値を持つことがあります。
19.4 属性一意性制約エントリの指定
属性一意性制約エントリは、cn=unique,cn=Common,cn=Products,cn=OracleContext
の下に格納されます。
この項の例を理解するには、図19-1を参照してください。
この項では、属性一意性制約の作成時に適用される規則について、例を使用して説明します。この項の内容は、次のとおりです。
19.4.1 属性一意性制約での複数の属性名の指定
複数の属性一意性制約でorcluniqueattrname
の値が異なる場合、その影響は互いに無関係です。
たとえば、ユーザーが、次のような2つの属性一意性制約を定義するとします。
Constraint1:
orcluniqueattrname: employee_id
Constraint2:
orcluniqueattrname: email_id
この例で、制約1と制約2は、それぞれの属性一意性の有効範囲内で指定された属性に対して一意性を適用します。制約1と制約2は、互いに無関係です。
19.4.2 属性一意性制約での複数のサブツリーの指定
複数の属性一意性制約で、orcluniqueattrname
、orcluniquescope
およびorcluniqueobjectclass
の値が同一で、orcluniquesubtree
の値が異なる場合は、それらの属性一意性制約で指定されたサブツリーの有効範囲が個々にチェックされます。
たとえば、図19-1を参照してください。ユーザーが、次のような2つの属性一意性制約を定義するとします。
Constraint1:
orcluniqueattrname: employee_id orcluniquesubtree: o=sales, c=us, cn=root orcluniquescope: onelevel
Constraint2:
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
を持つ場合があります。
19.4.3 属性一意性制約での複数の有効範囲の指定
複数の属性一意性制約で、orcluniqueattrname
、orcluniquesubtree
およびorcluniqueobjectclass
の値が同一で、orcluniquescope
の値が異なる場合は、有効範囲が最大の属性一意性制約が有効になります。
たとえば、図19-1で、ユーザーが、次のような2つの属性一意性制約を定義するとします。
Constraint1:
orcluniqueattrname: employee_id orcluniquesubtree: c=us, cn=root orcluniquescope: onelevel
Constraint2:
orcluniqueattrname: employee_id orcluniquesubtree: c=us, cn=root orcluniquescope: sub
この例で、employee_id
の属性一意性は、サブツリーc=us,cn=root
の下にあるすべてのエントリおよびエントリc=us,cn=root
自体に対して適用されます。これは、ユーザーが制約2
のみを定義した場合も同様であることに注意してください。
19.4.4 属性一意性制約での複数のオブジェクト・クラスの指定
複数の属性一意性制約で、orcluniqueattrname
、orcluniquesubtree
およびorcluniquescope
の値が同一で、orcluniqueobjectclass
の値が異なる場合は、それらのオブジェクト・クラスに属する属性を結合したものがチェックされます。
たとえば、図19-1を参照してください。ユーザーが、次のような2つの属性一意性制約を定義するとします。
Constraint1:
orcluniqueattrname: employee_id orcluniquesubtree: c=us, cn=root orcluniqueobjectclass: person
Constraint2:
orcluniqueattrname: employee_id orcluniquesubtree: c=us, cn=root
この例で、employee_id
の属性一意性は、エントリが属するオブジェクト・クラスに関係なく、サブツリーc=us,cn=root
の下にあるすべてのエントリと、エントリc=us,cn=root
自体に対して適用されます。制約2はorcluniqueobjectclass
属性を指定していません。これはすべてのオブジェクト・クラスを指定した場合と同じです。
19.4.5 属性一意性制約での複数のサブツリー、有効範囲およびオブジェクト・クラスの指定
複数の属性一意性制約で、orcluniqueattrname
の値が同一で、orcluniquesubtree
、orcluniquescope
およびorcluniqueobjectclass
の値が異なる場合は、異なる制約の属性一意性の有効範囲に属するエントリが個々にチェックされます。
たとえば、図19-1で、ユーザーが、次のような2つの属性一意性制約を定義するとします。
Constraint1:
orcluniqueattrname: employee_id orcluniquesubtree: o=sales, c=us, cn=root orcluniquescope: onelevel orcluniqueobjectclass: person
Constraint2:
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
自体
19.5 ODSMを使用した属性一意性制約エントリの管理
属性一意性制約ポリシーは、Oracle Directory Services Manager (ODSM)を使用して管理できます。
次の各項では、これについてさらに詳しく説明しています。
19.5.1 ODSMを使用した属性一意性制約エントリの作成
ODSMを使用して、属性一意性制約エントリを作成できます。
ODSMを使用して属性一意性制約エントリを作成するには:
- 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
- タスク選択バーで、「拡張」を選択します。
- 左側のペインで「属性一意性」を展開します。
- ツールバーの「属性一意性制約の作成」アイコンを選択します。「新規制約」ウィンドウが表示されます。
- 「新規制約」ダイアログ・ボックスで、テキスト・フィールドに値を入力し、「一意属性の有効範囲」を選択します。「参照」をクリックすると「一意属性のサブツリー」を選択できます。
- ここで制約を有効化する場合、「一意属性の有効化」をクリックします。
- 「OK」を選択します。作成したエントリが、左側のパネルの属性一意性制約エントリのリストに表示されます。
- 「適用」をクリックしてこの制約を適用するか、「元に戻す」をクリックして新規エントリの作成前の状態に戻します。
19.5.2 ODSMを使用した属性一意性制約エントリの変更
ODSMを使用して、属性一意性制約を変更できます。
ODSMを使用して属性一意性制約エントリを変更するには:
- 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
- タスク選択バーで、「拡張」を選択します。
- 左側のペインで「属性一意性」を展開します。
- 既存の一意性制約を選択します。これにより、属性一意性制約ウィンドウの「一般」タブが表示されます。
- 値を入力または変更します。
- ここで制約を有効化する場合、「一意属性の有効化」をクリックします。
- 「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの変更前の状態に戻します。
19.5.3 ODSMを使用した属性一意性制約エントリの削除
ODSMを使用して、属性一意性制約エントリを削除できます。
属性一意性制約ポリシーを削除するには:
- 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
- タスク選択バーで、「拡張」を選択します。
- 左側のペインで「属性一意性」を展開します。
- 左側のパネルで、削除する属性一意性制約エントリを選択します。
- 「削除」アイコンを選択し、確認を求めるプロンプトで削除を確認します。削除したエントリは、左側のパネルの属性一意性制約エントリのリストに表示されなくなります。
- 「適用」をクリックしてこの変更を適用するか、「元に戻す」をクリックしてエントリの削除前の状態に戻します。
19.6 コマンド行を使用した属性一意性制約エントリの管理
属性一意性制約ポリシーは、コマンド行を使用して管理できます。
次の各項では、これについてさらに詳しく説明しています。
19.6.1 コマンド行を使用したディレクトリ全体を対象とする属性一意性の作成
ディレクトリ全体を対象とする属性一意性のインスタンスを作成するには、値の一意性を適用する属性名を指定します。
たとえば、MyCompanyの米国の全従業員に対して一意の従業員識別子を作成するステップは、次のとおりです。
19.6.2 コマンド行を使用した属性一意性制約の指定
コマンド行を使用して、属性一意性制約を指定できます。
次の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
19.6.3 コマンド行を使用した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
19.6.4 コマンド行を使用した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
19.6.5 コマンド行を使用した属性一意性制約エントリの変更
属性一意性エントリを変更するには、エントリの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
に適用するステップは、次のとおりです。