2. ディレクトリ利用者情報のモデル
[X.501] では、次のように述べられている。
ディレクトリの目的は、ある「世界」における対象となるオブジェクト
(object) に関する情報を保持し、その情報へのアクセスを提供すること
である。オブジェクトは、識別可能 (命名可能) なものであれば何でも
よい。
オブジェクトクラス (object class) は、一定の特性を共有する、識別
されたオブジェクトまたは想定可能なオブジェクトの集合である。すべて
のオブジェクトは、少なくとも 1 つのクラスに属する。オブジェクト
クラスは他のオブジェクトクラスのサブクラスである場合があり、その
場合、前者のクラス、すなわちサブクラスのメンバーは、後者のクラス、
すなわちスーパークラスのメンバーでもあると見なされる。サブクラス
のサブクラスという関係も、任意の深さまで存在し得る。
ディレクトリエントリ (directory entry) は、名前を持つ情報の集合であり、 ディレクトリに保持される情報の基本単位である。ディレクトリエントリ には複数の種類がある。
オブジェクトエントリ (object entry) は特定のオブジェクトを表す。 エイリアスエントリ (alias entry) は代替名を提供する。サブエントリ (subentry) は管理情報および/または運用情報を保持する。
ディレクトリ情報ベース (Directory Information Base、DIB) を表すエントリ の集合は、ディレクトリ情報ツリー (Directory Information Tree、DIT) と 呼ばれる木構造に階層的に編成される。
2.1 節では、ディレクトリ情報ツリーについて説明する。 2.2 節では、エントリの構造について論じる。 2.3 節では、エントリの命名について論じる。
2.4 節では、オブジェクトクラスについて論じる。 2.5 節では、属性記述について論じる。 2.6 節では、エイリアスエントリについて論じる。
2.1. ディレクトリ情報ツリー
前述のとおり、DIB はディレクトリ情報ツリー (DIT) と呼ばれる木構造に 階層的に編成されたエントリの集合で構成される。より厳密には、エントリ を頂点とする木である。
頂点間の辺は、エントリ間の関係を定義する。X から Y への辺が存在する 場合、X のエントリは Y の直接上位であり、Y は X の直接下位である。 あるエントリの上位には、その直接上位と、その上位にあるすべての エントリが含まれる。あるエントリの下位には、そのすべての直接下位と、 それらの下位にあるすべてのエントリが含まれる。
同様に、オブジェクトエントリ間の上位/下位関係を用いて、それらが表す オブジェクト間の関係を導出できる。DIT 構造規則を用いて、オブジェクト 間の関係を規定できる。
注: エントリの直接上位は、そのエントリの親とも呼ばれ、エントリの 直接下位は、そのエントリの子とも呼ばれる。同じ親を持つエントリは、 兄弟と呼ばれる。
2.2. エントリの構造
エントリは、そのエントリが表すオブジェクトに関する情報を保持する属性 の集合からなる。一部の属性は利用者情報を表し、利用者属性 (user attribute) と呼ばれる。それ以外の属性は運用情報および/または管理情報 を表し、運用属性 (operational attribute) と呼ばれる。
属性は、属性記述 (1 つの型と 0 個以上のオプション) と、それに関連付け られた 1 つ以上の値からなる。属性は、その属性記述によって参照される ことが多い。たとえば、'givenName' 属性は、属性記述 'givenName' ('givenName' 属性タイプ [RFC4519] と 0 個のオプション) およびそれに 関連付けられた 1 つ以上の値からなる属性である。
属性タイプは、その属性が複数の値を持てるかどうか、その属性の値を構築 および比較するために使用する構文とマッチング規則、ならびにその他の 機能を規定する。オプションは、サブタイプおよびその他の機能を示す。
属性値は、属性タイプに対して定義された構文に従う。
1 つの属性の 2 つの値が等価であってはならない。2 つの値は、その属性 タイプの等価マッチング規則に従って照合した場合に一致するとき、かつ そのときに限り等価と見なされる。あるいは、属性タイプに等価マッチング 規則が定義されていない場合、2 つの値が同一であるとき、かつそのときに 限り等価である。(その他の制約については 2.5.1 節を参照。)
たとえば、'givenName' 属性は複数の値を持つことができ、それらは Directory String でなければならず、大文字と小文字は区別されない。 属性タイプの等価マッチング規則によりこれらは等価な値であるため、 'givenName' 属性は "John" と "JOHN" の両方を保持できない。
さらに、属性は、それ自身と等価でない値を持ってはならない。たとえば、 'givenName' 属性は、REPLACEMENT CHARACTER (U+FFFD) コードポイントを 含む Directory String を値として持つことができない。この属性の等価 マッチング規則によれば、その Directory String が関与する照合は Undefined になるためである。
属性をエントリの命名に使用する場合、相対識別名 (Relative Distinguished Name) を構成する際には、その属性の値を 1 つだけ使用する。この値を 識別値 (distinguished value) と呼ぶ。
2.3. エントリの命名
2.3.1. 相対識別名
各エントリは、その直接上位に対して相対的に命名される。この相対名は 相対識別名 (Relative Distinguished Name、RDN) [X.501] と呼ばれ、0 個 のオプションを持つ属性記述と属性値とで構成される、1 つ以上の属性値 アサーション (attribute value assertion、AVA) の順序なし集合からなる。 これらの AVA は、エントリの属性値 (それぞれが識別値) と一致するように 選択される。
エントリの相対識別名は、そのエントリの直接上位に属するすべての直接 下位、すなわちすべての兄弟の間で一意でなければならない。
RDN の文字列表現の例を次に示す [RFC4514]。
UID=12345
OU=Engineering
CN=Kurt Zeilenga+L=Redwood Shores
最後の例は複数値 RDN、すなわち複数の AVA で構成される RDN の例である。
2.3.2. 識別名
エントリの完全修飾名は識別名 (Distinguished Name、DN) [X.501] と呼ばれ、 そのエントリの RDN と、その直接上位の DN を連結したものである。識別名 は、ツリー内のエントリを曖昧さなく参照する。DN の文字列表現の例を次に 示す [RFC4514]。
[email protected],DC=example,DC=com
CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US
2.3.3. エイリアス名
エイリアス (alias)、すなわちエイリアス名 (alias name) とは、「エイリアス エントリの使用によってオブジェクトに与えられる名前」である [X.501]。 エイリアスエントリについては 2.6 節で説明する。
2.4. オブジェクトクラス
オブジェクトクラスは、「一定の特性を共有する、識別されたオブジェクト (または想定可能なオブジェクト) の集合」である [X.501]。
[X.501] では、次のように定義されている。
オブジェクトクラスは、ディレクトリ内で次のような多くの目的に使用
される。
- オブジェクト、およびそのオブジェクトに対応するエントリを記述し、
分類する。
- 適切な場合、ディレクトリの動作を制御する。
- DIT 構造規則の仕様と組み合わせて、DIT 内のエントリの位置を規定
する。
- DIT 内容規則の仕様と組み合わせて、エントリに含まれる属性を規定
する。
- 適切な管理権限によって特定のポリシーと関連付けられるエントリの
クラスを識別する。
あるオブジェクトクラス (サブクラス) は、別のオブジェクトクラス
(その直接スーパークラス) から派生でき、そのクラス自体も、さらに
一般的なオブジェクトクラスから派生できる。構造型オブジェクトクラス
の場合、この過程は最も一般的なオブジェクトクラスである 'top'
(2.4.1 節で定義) で終了する。あるオブジェクトクラスからその最上位の
オブジェクトクラスまでのスーパークラスの順序付き集合を、その
スーパークラスチェーン (superclass chain) と呼ぶ。
オブジェクトクラスは、2 つ以上の直接スーパークラス (同じスーパー
クラスチェーンに属さないスーパークラス) から派生することもできる。
このサブクラス化の機能を多重継承 (multiple inheritance) と呼ぶ。
各オブジェクトクラスは、そのクラスに属するエントリに存在することが 必須の属性集合と、存在が許可される属性集合を識別する。あるクラスの エントリは、それが属する各クラスの要件を満たさなければならないため、 オブジェクトクラスは許可属性および必須属性の集合をスーパークラスから 継承するといえる。サブクラスは、そのスーパークラスで許可されている 属性を必須として識別できる。ある属性が両方の集合のメンバーである場合、 その属性は存在しなければならない。
各オブジェクトクラスは、抽象 (Abstract)、構造型 (Structural)、または 補助 (Auxiliary) の 3 種類のいずれかとして定義される。
各オブジェクトクラスは、オブジェクト識別子 (object identifier、OID) と、 任意で 1 つ以上の短い名前 (記述子) によって識別される。
2.4.1. 抽象オブジェクトクラス
抽象オブジェクトクラスは、その名が示すように、他のオブジェクトクラス が継承するよう定義できる特性の基礎を提供する。エントリは、その抽象 クラスを継承する構造型クラスまたは補助クラスに属していない限り、抽象 オブジェクトクラスに属することはできない。
抽象オブジェクトクラスは、構造型または補助オブジェクトクラスから派生 できない。
すべての構造型オブジェクトクラスは、抽象オブジェクトクラス 'top' から 直接または間接に派生する。補助オブジェクトクラスは、必ずしも 'top' から派生するとは限らない。
'top' オブジェクトクラスのオブジェクトクラス定義 (4.1.1 節を参照) を 次に示す。
( 2.5.6.0 NAME 'top' ABSTRACT MUST objectClass )
すべてのエントリは、抽象オブジェクトクラス 'top' に属する。
2.4.2. 構造型オブジェクトクラス
[X.501] では、次のように述べられている。
DIT の構造仕様で使用するために定義されたオブジェクトクラスを、
構造型オブジェクトクラスと呼ぶ。構造型オブジェクトクラスは、準拠
エントリが表すオブジェクトの名前構造を定義するために使用される。
オブジェクトエントリまたはエイリアスエントリは、最下位のオブジェクト
クラスとして 1 つの構造型オブジェクトクラスを持つ、正確に 1 本の
構造型オブジェクトクラスのスーパークラスチェーンによって特徴付け
られる。この構造型オブジェクトクラスを、そのエントリの構造型
オブジェクトクラスと呼ぶ。
構造型オブジェクトクラスは、関連するエントリと次のような関係を持つ。
- 構造型オブジェクトクラスに準拠するエントリは、そのオブジェクト
クラスによって制約される現実世界のオブジェクトを表す。
- DIT 構造規則は、構造型オブジェクトクラスだけを参照する。エントリ
の構造型オブジェクトクラスは、DIT 内でのエントリの位置を指定する
ために使用される。
- エントリの構造型オブジェクトクラスは、関連付けられた DIT 内容
規則とともに、エントリの内容を制御するために使用される。
エントリの構造型オブジェクトクラスを変更してはならない。
各構造型オブジェクトクラスは、抽象オブジェクトクラス 'top' の直接または 間接のサブクラスである。
構造型オブジェクトクラスは、補助オブジェクトクラスをサブクラス化できない。
各エントリは、その構造型オブジェクトクラス、およびその構造型オブジェクト クラスのスーパークラスチェーンに含まれるすべてのクラスに属するとされる。
2.4.3. 補助オブジェクトクラス
補助オブジェクトクラスは、エントリの特性を拡張するために使用される。 通常は、エントリに存在することが必須または許可される属性の集合を拡張 するために使用される。エントリまたはエントリのクラスを記述するために 使用できる。
補助オブジェクトクラスは、構造型オブジェクトクラスをサブクラス化できない。
エントリは、そのエントリの構造型オブジェクトクラスに関連付けられた DIT 内容規則によって許可される補助オブジェクトクラス集合の任意の部分集合に 属することができる。エントリの構造型オブジェクトクラスに DIT 内容規則 が関連付けられていない場合、そのエントリはいずれの補助オブジェクト クラスにも属することができない。
エントリが属する補助オブジェクトクラスの集合は、時間の経過とともに変更 できる。
2.5. 属性記述
属性記述は、属性タイプ(2.5.1 節を参照)と、0 個以上の属性オプション (2.5.2 節を参照)の集合から構成される。
属性記述は、次の ABNF で表される。
attributedescription = attributetype options
attributetype = oid
options = *( SEMI option )
option = 1*keychar
ここで、
有効な属性記述の例を次に示す。
2.5.4.0
cn;lang-de;lang-en
owner
認識されない属性タイプを持つ属性記述は、認識されないものとして扱う。 サーバーは、認識されない属性オプションを持つ属性記述を、認識されない ものとして扱わなければならない(SHALL)。クライアントは、認識されない 属性オプションをタグ付けオプションとして扱ってもよい(MAY)(2.5.2.1 節を参照)。
1 つのエントリのすべての属性は、それぞれ異なる属性記述を持たなければ ならない。
2.5.1. 属性タイプ
属性タイプは、その属性が複数の値を持てるかどうか、その属性の値を構築 および比較するために使用する構文とマッチング規則、ならびにその他の 機能を規定する。
属性タイプに等価マッチングが指定されていない場合、次のようになる。
- そのタイプの属性を命名に使用することはできない。
- 属性を追加する場合(またはすべての値を置換する場合)、いずれの
2 つの値も等価であってはならない(2.2 節を参照)。
- 多値属性の個々の値を独立して追加または削除してはならない。
- そのようなタイプの値を使用する属性値アサーション(検索フィルター
におけるマッチングや比較など)を実行することはできない。
それ以外の場合、指定された等価マッチング規則を使用して、その属性 タイプに関する属性値アサーションを評価する。指定される等価規則は、 推移的かつ可換でなければならない。
属性タイプは、その属性がユーザー属性であるか運用属性であるかを示す。 運用属性の場合、属性タイプは運用上の用途と、その属性をユーザーが変更 できるかどうかも示す。運用属性については 3.4 節で説明する。
属性タイプ(サブタイプ)は、より汎用的な属性タイプ(直接スーパー タイプ)から派生できる。サブタイプ化には次の制約が適用される。
- サブタイプは、その直接スーパータイプと同じ用途を持たなければ
ならない。
- サブタイプの構文は、そのスーパータイプの構文と同じであるか、
その構文をより限定したものでなければならない。
- スーパータイプが集合属性(collective)である場合、サブタイプも
集合属性でなければならない [RFC3671]。
あるサブタイプのみで構成され、オプションを持たない属性記述は、その サブタイプの直接スーパータイプのみで構成され、オプションを持たない 属性記述の直接記述サブタイプ(direct description subtype)と呼ばれる。
各属性タイプは、オブジェクト識別子(OID)によって識別され、必要に 応じて 1 つ以上の短い名前(記述子)によっても識別される。
2.5.2. 属性オプション
属性記述オプションには複数の種類がある。LDAP 技術仕様では、そのうち 1 種類であるタグ付けオプションについて詳述する。
すべてのオプションを、ディレクトリに保持されている属性に関連付けられる わけではない。タグ付けオプションは関連付けることができる。
すべてのオプションをすべての属性タイプと組み合わせて使用できるわけ ではない。その場合、属性記述は認識されないものとして扱う。
相互排他的なオプションを含む属性記述は、認識されないものとして扱う。 すなわち、"x-foo" と "x-bar" が相互排他的である場合、 "cn;x-bar;x-foo" は認識されないものとして扱う。
将来の文書で、別の種類のオプションが規定される可能性がある。それらの 文書では、定義する新しい種類のオプションとタグ付けオプションとの関係を 詳述しなければならない。特に、新しい種類のオプションをディレクトリに 保持されている属性に関連付けられるかどうか、属性値の転送にどのような 影響を与えるか、および属性記述階層でどのように扱うかを詳述しなければ ならない。
オプションは、本文書の 2.5 節で定義される
オプションの登録手順については、BCP 64、RFC 4520 [RFC4520] に詳述 されている。
2.5.2.1. タグ付けオプション
ディレクトリに保持されている属性は、任意の個数のタグ付けオプションを 持つ属性記述を使用できる。タグ付けオプションが相互排他的になることは ない。
N 個のタグ付けオプションを持つ属性記述は、同じ属性タイプを持ち、N 個 のオプションのうち 1 つだけを除いたすべてのオプションを持つ各属性記述 の直接(記述)サブタイプである。属性タイプにスーパータイプがある場合、 その属性記述は、スーパータイプと N 個のタグ付けオプションからなる属性 記述の直接(記述)サブタイプでもある。すなわち、 'cn;lang-de;lang-en' は 'cn;lang-de'、'cn;lang-en'、および 'name;lang-de;lang-en' の直接(記述)サブタイプである('cn' は 'name' のサブタイプであり、両方とも [RFC4519] で定義されている)。
2.5.3. 属性記述階層
属性タイプのサブタイプ化(2.5.1 節で説明)または属性タグ付けオプション のサブタイプ化(2.5.2.1 節で説明)によって示されるとおり、属性記述は 0 個以上の他の属性記述の直接サブタイプになり得る。これらのサブタイプ 関係は、属性記述および属性の階層を形成するために使用される。
[X.501] を基にすると、次のようになる。
属性階層は、さまざまな粒度で DIB にアクセスできるようにする。これは、
属性の値成分に、その固有の属性記述(属性への直接参照)またはより
汎用的な属性記述(間接参照)のいずれかを使用してアクセスできるように
することで実現される。
意味的に関連する属性を階層関係に配置し、より特殊化されたものを、より
一般化されたものの下位に置くことができる。より一般化された属性記述を
指定すれば、属性とその値を容易に検索または取得できる。このように指定
されたフィルター項目は、指定された記述だけでなく、より特殊化された
記述についても評価される。
下位の特殊化された記述を検索結果の一部として返すよう選択した場合、
利用可能であればそれらの記述を返す。より一般的な記述を検索結果の一部
として返すよう選択した場合、利用可能であれば一般的な記述と特殊化され
た記述の両方を返す。属性値は、常にそれ自身の属性記述の値として返す。
ユーザーがエントリの内容を変更する場合、属性階層内のすべての属性記述
は、互いに異なり、関連のない記述として扱われる。
オブジェクトエントリまたは別名エントリに格納された属性値は、厳密に
1 つの属性記述に属する。その値をエントリに最初に追加するときに、
その記述が示される。
エントリのサブスキーマ管理において、属性が必須であるという指定は、 エントリに、属性階層に属する属性記述の値が含まれ、その記述の属性タイプ が必須属性のタイプと同じであれば満たされる。すなわち、"MUST name" の 指定は 'name' または 'name;x-tag-option' によって満たされるが、'CN' または 'CN;x-tag-option' によっては満たされない('CN' が 'name' の サブタイプであっても同様である)。同様に、エントリには、属性階層に属する 属性記述の値を含めることができる。ただし、その記述の属性タイプが、 エントリの属するオブジェクトクラスの定義に明示的に含まれているか、 そのエントリに適用される DIT 内容規則によって許可されていなければなら ない。すなわち、"MAY name"(または "MUST name")では 'name' と 'name;x-tag-option' が許可されるが、'CN' と 'CN;x-tag-option' は "MAY name"(または "MUST name")では許可されない。
その他のポリシー管理については、個々の管理モデルの仕様に別段の規定が ない限り、属性階層内のすべての属性記述は、互いに異なり、関連のない記述 として扱われる。
2.6. 別名エントリ
[X.501] を基にすると、次のようになる。
オブジェクトの別名、すなわち別名名称とは、別名エントリを使用して
オブジェクトまたはオブジェクトエントリに与えられる代替名称である。
各別名エントリは、'aliasedObjectName' 属性(X.500 では
'aliasedEntryName' 属性として知られる)に、あるオブジェクトの名称を
含む。したがって、別名エントリの識別名も、そのオブジェクトの名称に
なる。
注 - 'aliasedObjectName' 内の名称は、別名が指している名称と
呼ばれる。この名称は、いずれかのエントリの識別名である
必要はない。
別名名称をオブジェクト名称に変換することを(別名)参照解除と呼ぶ。
これは、想定された名称の中に別名名称が見つかった場合に、それを対応
する 'aliasedObjectName' 属性の値で体系的に置換する処理である。
この処理では、複数の別名エントリを調べる必要が生じる場合がある。
DIT 内の個々のエントリには、0 個以上の別名名称を設定できる。したがって、
複数の別名エントリが同じエントリを指すことがある。別名エントリは、
リーフでないエントリを指すことも、別の別名エントリを指すこともできる。
別名エントリは下位エントリを持ってはならないため、常にリーフエントリ
となる。
すべての別名エントリは、'alias' オブジェクトクラスに属さなければ
ならない。
'alias' オブジェクトクラスを持つエントリは、適切な命名属性の存在を許可 する 1 つ以上のオブジェクトクラスにも属するか、またはその存在を許可する DIT 内容規則によって管理されなければならない。
例:
dn: cn=bar,dc=example,dc=com
objectClass: top
objectClass: alias
objectClass: extensibleObject
cn: bar
aliasedObjectName: cn=foo,dc=example,dc=com
2.6.1. 'alias' オブジェクトクラス
別名エントリは、'alias' オブジェクトクラスに属する。
( 2.5.6.1 NAME 'alias'
SUP top STRUCTURAL
MUST aliasedObjectName )
2.6.2. 'aliasedObjectName' 属性タイプ
'aliasedObjectName' 属性は、別名が指すエントリの名称を保持する。 'aliasedObjectName' 属性は、X.500 では 'aliasedEntryName' 属性として 知られている。
( 2.5.4.1 NAME 'aliasedObjectName'
EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
SINGLE-VALUE )
'distinguishedNameMatch' マッチング規則と DistinguishedName (1.3.6.1.4.1.1466.115.121.1.12) 構文は [RFC4517] で定義されている。