4. ディレクトリスキーマ
[X.501] では、次のように定義されている。
ディレクトリスキーマとは、DIT の構造、エントリに可能な命名方法、
エントリに保持できる情報、その情報を表すために使用される属性、
情報の検索と取得を容易にするためのそれらの階層編成、ならびに属性値
アサーションおよびマッチング規則アサーションにおいて属性値を照合する
方法に関する定義と制約の集合である。
注記 1 - スキーマにより、ディレクトリシステムは、たとえば次のことを
行える。
- 不適切なオブジェクトクラスの下位エントリ (たとえば、人の下位に
国を置くこと) が作成されるのを防ぐ。
- オブジェクトクラスに不適切な属性タイプ (たとえば、人のエントリに
シリアル番号を付加すること) がエントリに追加されるのを防ぐ。
- 属性タイプに定義された構文と一致しない構文の属性値 (たとえば、
ビット列に印字可能文字列を追加すること) が追加されるのを防ぐ。
形式的には、ディレクトリスキーマは次の定義の集合から構成される。
a) 構造型オブジェクトクラスの基本的な命名関係を定義する名前形式定義。
b) エントリが持つことのできる名前、および DIT 内でエントリを相互に
関連付ける方法を定義する DIT 構造規則定義。
c) エントリの構造型オブジェクトクラスによって示される範囲を超えて、
エントリに許容される属性の仕様を拡張する DIT 内容規則定義。
d) 特定のクラスのエントリにそれぞれ存在しなければならない必須属性と、
存在してもよい任意属性の基本集合を定義し、定義対象のオブジェクト
クラスの種類を示すオブジェクトクラス定義。
e) 属性を識別するオブジェクト識別子、その構文、関連するマッチング規則、
運用属性であるかどうかと、そうである場合の種類、集合属性であるか
どうか、複数の値を持つことが許可されるかどうか、および別の属性
タイプから派生したものかどうかを識別する属性タイプ定義。
f) マッチング規則を定義するマッチング規則定義。
LDAP では、さらに次が含まれる。
g) LDAP で使用される符号化を定義する LDAP 構文定義。
4.1. スキーマ定義
本節のスキーマ定義は ABNF を使用して記述され、第 1.2 節で規定した 共通生成規則に加えて次の生成規則に依存する。
noidlen = numericoid [ LCURLY len RCURLY ]
len = number
oids = oid / ( LPAREN WSP oidlist WSP RPAREN )
oidlist = oid *( WSP DOLLAR WSP oid )
extensions = *( SP xstring SP qdstrings )
xstring = "X" HYPHEN 1*( ALPHA / HYPHEN / USCORE )
qdescrs = qdescr / ( LPAREN WSP qdescrlist WSP RPAREN )
qdescrlist = [ qdescr *( SP qdescr ) ]
qdescr = SQUOTE descr SQUOTE
qdstrings = qdstring / ( LPAREN WSP qdstringlist WSP RPAREN )
qdstringlist = [ qdstring *( SP qdstring ) ]
qdstring = SQUOTE dstring SQUOTE
dstring = 1*( QS / QQ / QUTF8 ) ; escaped UTF-8 string
QQ = ESC %x32 %x37 ; "\27"
QS = ESC %x35 ( %x43 / %x63 ) ; "\5C" / "\5c"
; Any UTF-8 encoded Unicode character
; except %x27 ("\'") and %x5C ("\")
QUTF8 = QUTF1 / UTFMB
; Any ASCII character except %x27 ("\'") and %x5C ("\")
QUTF1 = %x00-26 / %x28-5B / %x5D-7F
本節のスキーマ定義では、多くの共通用語も共有される。
NAME フィールドは、OID の別名として使用する短い名前 (記述子) の集合を 提供する。
DESC フィールドでは、ディレクトリ管理者および/または実装者が説明文字列を 任意に指定できる。仕様が説明文字列を提案することはできるが、提案された 説明文字列 (または何らかの説明文字列) を使用する必要はない。
OBSOLETE フィールドが存在する場合、その要素が有効でないことを示す。
実装者は、本文書の将来の版でこれらの定義が拡張され、追加の用語が含まれる
可能性があることに留意すべきである。識別子が "X-" で始まる用語は私的な
実験用に予約されており、その後に
4.1.1. オブジェクトクラス定義
オブジェクトクラス定義は、次の ABNF に従って記述する。
ObjectClassDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oids ] ; superior object classes
[ SP kind ] ; kind of class
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN
kind = "ABSTRACT" / "STRUCTURAL" / "AUXILIARY"
ここで、
4.1.2. 属性タイプ
属性タイプ定義は、次の ABNF に従って記述する。
AttributeTypeDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oid ] ; supertype
[ SP "EQUALITY" SP oid ] ; equality matching rule
[ SP "ORDERING" SP oid ] ; ordering matching rule
[ SP "SUBSTR" SP oid ] ; substrings matching rule
[ SP "SYNTAX" SP noidlen ] ; value syntax
[ SP "SINGLE-VALUE" ] ; single-value
[ SP "COLLECTIVE" ] ; collective
[ SP "NO-USER-MODIFICATION" ] ; not user modifiable
[ SP "USAGE" SP usage ] ; usage
extensions WSP RPAREN ; extensions
usage = "userApplications" / ; user
"directoryOperation" / ; directory operational
"distributedOperation" / ; DSA-shared operational
"dSAOperation" ; DSA-specific operational
ここで、
各属性タイプ記述には、SUP または SYNTAX フィールドの少なくとも一方を 含めなければならない。SYNTAX フィールドが指定されていない場合、属性 タイプ記述はその値を上位タイプから継承する。
SUP フィールドが指定されている場合、EQUALITY、ORDERING、および SUBSTRING フィールドは、指定されていなければ上位タイプの値を継承する。
デフォルトである userApplications の用途は、このタイプの属性が利用者 情報を表すことを示す。すなわち、これらは利用者属性である。
directoryOperation、distributedOperation、または dSAOperation の用途は、 このタイプの属性が運用情報および/または管理情報を表すことを示す。 すなわち、これらは運用属性である。
directoryOperation の用途は、このタイプの属性がディレクトリ運用属性で あることを示す。distributedOperation の用途は、このタイプの属性が DSA 共有用途の運用属性であることを示す。dSAOperation の用途は、この タイプの属性が DSA 固有の運用属性であることを示す。
COLLECTIVE には userApplications の用途が必要である。LDAP における 集合属性タイプの使用については、[RFC3671] で論じられている。
NO-USER-MODIFICATION には運用用途が必要である。
本文書では、
文字列ベースの構文を持つ値の文字数、またはその他すべての構文を持つ値の バイト数について、推奨される最小上限を示すことができる。この上限は、 属性タイプ記述において、構文の OBJECT IDENTIFIER の後に中括弧で囲んだ 上限値を付加することで示す。この上限は構文名自体の一部ではない。たとえば、 "1.3.6.4.1.1466.0{64}" は、サーバー実装が 64 文字の長さの文字列を許容 すべきであることを示唆するが、より長い文字列を許容してもよい。UTF-8 [RFC3629] は可変長符号化であるため、Directory String 構文の 1 文字が 複数のオクテットで符号化される場合があることに注意されたい。
4.1.3. マッチング規則
マッチング規則は、Compare 操作の実行時など、属性値アサーションを実行する 際に使用される。また、検索フィルタの評価、Modify 操作の実行中に追加または 削除する個々の値の決定、および識別名の比較にも使用される。
各マッチング規則は、オブジェクト識別子 (OID) と、任意で 1 つ以上の 短い名前 (記述子) によって識別される。
マッチング規則定義は、次の ABNF に従って記述する。
MatchingRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "SYNTAX" SP numericoid ; assertion syntax
extensions WSP RPAREN ; extensions
ここで、
4.1.4. マッチング規則の使用
マッチング規則の使用は、extensibleMatch 検索フィルターとの使用に適した 属性タイプを列挙する。
マッチング規則使用記述は、次の ABNF に従って記述される。
MatchingRuleUseDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "APPLIES" SP oids ; attribute types
extensions WSP RPAREN ; extensions
ここで、
4.1.5. LDAP 構文
(属性値およびアサーション値の)LDAP 構文は ASN.1 [X.680] を用いて 記述され、必要に応じて LDAP 固有の符号化として知られるオクテット文字列 符号化を持つ。一般に、LDAP 固有の符号化は UTF-8 [RFC3629] 形式の Unicode [Unicode] 文字列に制約される。
各 LDAP 構文は、オブジェクト識別子(OID)によって識別される。
LDAP 構文定義は、次の ABNF に従って記述される。
SyntaxDescription = LPAREN WSP
numericoid ; object identifier
[ SP "DESC" SP qdstring ] ; description
extensions WSP RPAREN ; extensions
ここで、
4.1.6. DIT 内容規則
DIT 内容規則は、「特定の構造型オブジェクトクラスのエントリ内容を管理 する規則」である [X.501]。
特定の構造型オブジェクトクラスに属する DIT エントリについて、DIT 内容 規則は、エントリが属することを許される補助オブジェクトクラスと、エントリ 内に必要、許可、または禁止される追加属性(タイプ別)を規定する。
禁止属性のリストには、その規則、構造型オブジェクトクラス、または許可 された補助オブジェクトクラスのいずれかで必須として列挙された属性を含める ことはできない。
各内容規則は、適用対象となる構造型オブジェクトクラスのオブジェクト 識別子と、存在する場合は短い名前(記述子)によって識別される。
エントリは、適用される内容規則に列挙された補助オブジェクトクラスにのみ 属することができる。
エントリには、そのエントリが属するオブジェクトクラスで必須とされるすべて の属性と、適用される内容規則で必須とされるすべての属性が含まれなければ ならない。
エントリには、そのエントリが属するオブジェクトクラスによって許可され、 かつ禁止されていない任意の属性と、適用される内容規則によって許可される すべての属性を含めることができる。
エントリには、適用される内容規則によって禁止される属性を含めることは できない。
エントリには、そのエントリの構造型オブジェクトクラスに適用される DIT 内容規則が適用される(その規則が存在し、サブスキーマ内で有効な場合。 2.4.2 節を参照)。そのエントリの構造型オブジェクトクラスに有効な規則が 存在しない場合、エントリの内容は構造型オブジェクトクラス(場合によっては ユーザースキーマおよびシステムスキーマの他の側面)によって管理される。 エントリの構造型オブジェクトクラスのスーパークラスに対する DIT 内容規則 は、そのエントリには適用されない。
DIT 内容規則記述は、次の ABNF に従って記述される。
DITContentRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "AUX" SP oids ] ; auxiliary object classes
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
[ SP "NOT" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions
ここで、
MUST、MAY、および NOT は、この DIT 内容規則の対象となるエントリに
おいて、それぞれ必須、許可、および禁止される属性タイプのリストを
指定する。
<extensions> は、拡張を記述する。
4.1.7. DIT 構造規則と名前形式
オブジェクトエントリと別名エントリを DIT 内のどこに配置できるか、および それらを構造型オブジェクトクラスに基づいてどのように命名できるかを規制 することが望ましい場合がある。
4.1.7.1. DIT 構造規則
DIT 構造規則は、「許可される上位エントリと下位エントリの関係を指定する ことにより、DIT の構造を管理する規則である。構造規則は名前形式、した がって構造型オブジェクトクラスを上位構造規則に関連付ける。これにより、 名前形式で識別される構造型オブジェクトクラスのエントリは、指定された 上位構造規則の適用を受けるエントリの下位として DIT 内に存在できる」 [X.501]。
DIT 構造規則記述は、次の ABNF に従って記述される。
DITStructureRuleDescription = LPAREN WSP
ruleid ; rule identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "FORM" SP oid ; NameForm
[ SP "SUP" ruleids ] ; superior rules
extensions WSP RPAREN ; extensions
ruleids = ruleid / ( LPAREN WSP ruleidlist WSP RPAREN )
ruleidlist = ruleid *( SP ruleid )
ruleid = number
ここで、
上位規則が識別されない場合、DIT 構造規則は自律管理点(たとえば、 サブスキーマによって制御されるサブツリーのルート頂点)に適用される [X.501]。
4.1.7.2. 名前形式
名前形式は、「特定の構造型オブジェクトクラスのエントリに許可される RDN を指定する。名前形式は、命名対象のオブジェクトクラスと、命名(すなわち RDN)に使用する 1 つ以上の属性タイプを識別する。名前形式は、DIT 構造 規則の定義で使用される基本的な仕様要素である」[X.501]。
各名前形式は、命名対象の構造型オブジェクトクラス、必須属性タイプの集合、 および許可属性タイプの集合を示す。特定の属性タイプが両方の集合に含まれる ことはできない。
その形式の適用を受けるエントリは、各必須属性タイプの値と、許可属性タイプ の 0 個以上の値を使用して命名されなければならない。
各名前形式は、オブジェクト識別子(OID)と、必要に応じて 1 つ以上の短い 名前(記述子)によって識別される。
名前形式記述は、次の ABNF に従って記述される。
NameFormDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "OC" SP oid ; structural object class
SP "MUST" SP oids ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions
ここで、
必須("MUST")リストと許可("MAY")リストに含まれるすべての属性タイプ は、それぞれ異なっていなければならない。
4.2. サブスキーマサブエントリ
サブスキーマサブエントリは、ディレクトリスキーマに関する情報を管理 するために使用される。1 つのサブスキーマサブエントリには、 ディレクトリツリーの特定部分にあるエントリが使用するすべてのスキーマ定義 (4.1 節を参照)が含まれる。
X.500(93) モデルに従うサーバーは、X.500 サブスキーマ機構([X.501] の 12 節に詳述)を使用してサブスキーマを実装するべきである(SHOULD)。 したがって、これらは通常のオブジェクトエントリではなく、サブエントリ である(3.2 節を参照)。LDAP クライアントは、サーバーが X.500 サブスキーマのその他の側面を実装していると仮定するべきではない (SHOULD NOT)。
サーバーは、サブスキーマの変更を許可してもよい(MAY)。サブスキーマを 変更する手順については、[X.501] の 14.5 節で説明されている。
エントリをマスターし、クライアントによるそのエントリの変更を許可する サーバーは、変更可能な各エントリに 'subschemaSubentry' 属性を提供する ことを含め、これらのサブスキーマサブエントリを実装してアクセスを 提供しなければならない(SHALL)。これにより、クライアントは存在を許可 される属性とオブジェクトクラスを検出できる。その他のすべてのサーバーも これを実装することが強く推奨される(RECOMMENDED)。
'subschemaSubentry' 属性の値は、そのエントリを制御するサブスキーマを 保持するサブスキーマサブエントリの名前である。
( 2.5.18.10 NAME 'subschemaSubentry'
EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
SINGLE-VALUE NO-USER-MODIFICATION
USAGE directoryOperation )
'distinguishedNameMatch' マッチング規則と DistinguishedName (1.3.6.1.4.1.1466.115.121.1.12) 構文は [RFC4517] で定義されている。
サブスキーマは、subschema 補助オブジェクトクラスに属する(サブ)エントリ に保持される。
( 2.5.20.1 NAME 'subschema' AUXILIARY
MAY ( dITStructureRules $ nameForms $ ditContentRules $
objectClasses $ attributeTypes $ matchingRules $
matchingRuleUse ) )
'ldapSyntaxes' 運用属性もサブスキーマエントリに存在できる。
サーバーは、サブスキーマサブエントリに(他の文書で記述される)追加 属性を提供してもよい(MAY)。
クライアントがスキーマ情報のキャッシュを維持できるよう、サーバーは サブスキーマサブエントリに 'createTimestamp' 属性と 'modifyTimestamp' 属性を提供するべきである(SHOULD)。
以下の各項では、それぞれのスキーマ定義属性タイプについて属性タイプ定義 を示す。
4.2.1. 'objectClasses'
この属性はオブジェクトクラスの定義を保持する。
( 2.5.21.6 NAME 'objectClasses'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.37
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および ObjectClassDescription (1.3.6.1.4.1.1466.115.121.1.37) 構文は [RFC4517] で定義されている。
4.2.2. 'attributeTypes'
この属性は属性タイプの定義を保持する。
( 2.5.21.5 NAME 'attributeTypes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および AttributeTypeDescription (1.3.6.1.4.1.1466.115.121.1.3) 構文は [RFC4517] で定義されている。
4.2.3. 'matchingRules'
この属性はマッチング規則の定義を保持する。
( 2.5.21.4 NAME 'matchingRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.30
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および MatchingRuleDescription (1.3.6.1.4.1.1466.115.121.1.30) 構文は [RFC4517] で定義されている。
4.2.4 'matchingRuleUse'
この属性はマッチング規則の使用の定義を保持する。
( 2.5.21.8 NAME 'matchingRuleUse'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.31
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および MatchingRuleUseDescription (1.3.6.1.4.1.1466.115.121.1.31) 構文は [RFC4517] で定義されている。
4.2.5. 'ldapSyntaxes'
この属性は LDAP 構文の定義を保持する。
( 1.3.6.1.4.1.1466.101.120.16 NAME 'ldapSyntaxes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.54
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および SyntaxDescription (1.3.6.1.4.1.1466.115.121.1.54) 構文は [RFC4517] で定義されている。
4.2.6. 'dITContentRules'
この属性は、サブスキーマに存在する DIT 内容規則を列挙する。
( 2.5.21.2 NAME 'dITContentRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.16
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および DITContentRuleDescription (1.3.6.1.4.1.1466.115.121.1.16) 構文は [RFC4517] で定義されている。
4.2.7. 'dITStructureRules'
この属性は、サブスキーマに存在する DIT 構造規則を列挙する。
( 2.5.21.1 NAME 'dITStructureRules'
EQUALITY integerFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.17
USAGE directoryOperation )
'integerFirstComponentMatch' マッチング規則および DITStructureRuleDescription (1.3.6.1.4.1.1466.115.121.1.17) 構文は [RFC4517] で定義されている。
4.2.8 'nameForms'
この属性は、有効な名前形式を列挙する。
( 2.5.21.7 NAME 'nameForms'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.35
USAGE directoryOperation )
'objectIdentifierFirstComponentMatch' マッチング規則および NameFormDescription (1.3.6.1.4.1.1466.115.121.1.35) 構文は [RFC4517] で定義されている。
4.3. 'extensibleObject' オブジェクトクラス
'extensibleObject' 補助オブジェクトクラスは、それに属するエントリが任意の利用者属性を保持することを許可する。このオブジェクトクラスで許可される属性タイプの集合は、暗黙に userApplications 用途の全属性タイプの集合となる。
( 1.3.6.1.4.1.1466.101.120.111 NAME 'extensibleObject'
SUP top AUXILIARY )
このエントリの他のオブジェクトクラスで必須の属性は引き続き存在しなければならず、禁止された属性は引き続き存在してはならない。
4.4. サブスキーマの発見
特定のエントリを制御するサブスキーマを保持するサブスキーマサブエントリ の DN を検出するには、そのエントリの 'subschemaSubentry' 運用属性を読み取る。そこからスキーマ属性を読むには、クライアントは Search 操作 [RFC4511] を発行しなければならない (MUST)。baseObject はサブスキーマサブエントリ の DN、scope は baseObject、filter は "(objectClass=subschema)" [RFC4515] とし、attributes フィールドに必要なスキーマ属性名を列挙する。注: "(objectClass=subschema)" フィルターにより、X.500 へのゲートウェイとなる LDAP サーバーはサブエントリ情報の要求を検出できる。
クライアントは、公開サブスキーマが完全であること、サーバーが公開した全スキーマ要素をサポートすること、または非公開要素をサポートしないことを仮定すべきではない (SHOULD NOT)。