7.5. カスタムスキーマファイルの手動での作成
スキーマを拡張することにより、カスタム属性とオブジェクトクラスを Directory Server に追加できます。以下のように、スキーマを拡張できます。
- スキーマファイルの作成による手動での拡張(このセクションでは、このプロセスを説明します)
- コマンドラインで dsconf ユーティリティーを使用した拡張
- Directory Server Web コンソールを使用した拡張
7.5.1. スキーマファイルの要件 リンクのコピーリンクがクリップボードにコピーされました!
スキーマファイルは、cn=schema
エントリーを定義する LDIF 形式を使用します。各属性タイプとオブジェクトクラスがこのエントリーに追加されます。
スキーマファイルの要件は次のとおりです。
ファイルは次のエントリーで始まる必要があります。
dn: cn=schema
dn: cn=schema
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - スキーマファイルには、属性タイプまたはオブジェクトクラス、あるいはその両方を含めることができます。
- オブジェクトクラス定義は、他のスキーマファイルで定義された属性を使用できます。
カスタムスキーマファイルを使用するインスタンスに応じて、次のいずれかの場所に保存します。
-
/etc/dirsrv/slapd-<instance_name>/schema/
は、この特定のインスタンスでスキーマファイルを使用できるようにします。 -
/usr/share/dirsrv/schema/
は、このホストで実行しているすべてのインスタンスでスキーマファイルを使用できるようにします。
-
デフォルトでは、Directory Server は
99user.ldif
ファイルのカスタムスキーマを想定しています。別のファイル名を使用する場合は、以下のようにします。-
名前は、アルファベット順で
99user.ldif
よりも前でなければなりません。たとえば、99aaa.ldif
は問題ありませんが、99zzz.ldif
は適切ではありません。 カスタムスキーマファイルは、
00
から98
までのコアスキーマファイルの後にロードする必要があるため、名前は 2 桁で始まり、01
より大きくなければなりません。Directory Server は、スキーマファイルをアルファベット順に読み取ります。したがって、たとえば、定義
99user.ldif
を保存すると、名前が00
と01
で始まる標準ファイルの定義がオーバーライドされます。
-
名前は、アルファベット順で
-
/usr/share/dirsrv/data/
ディレクトリーの標準スキーマファイルを使用する場合は、ファイルを使用するインスタンスに応じて、ファイルを/etc/dirsrv/slapd-<instance_name>/schema/
または/usr/share/dirsrv/schema/
にコピーします。ただし、宛先ディレクトリーで別のファイル名を使用してください。それ以外の場合は、Directory Server はアップグレード中にファイルの名前を変更し、.bak
接尾辞を追加します。
例7.2 カスタムスキーマファイルの例
dn: cn=schema objectClasses: ( 2.16.840.1.1133730.2.1.123 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' ) attributeTypes: ( 2.16.840.1.1133730.2.1.99 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
dn: cn=schema
objectClasses: ( 2.16.840.1.1133730.2.1.123 NAME 'exampleperson' DESC 'An example
person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.99 NAME 'dateOfBirth' DESC 'For employee
birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
7.5.2. カスタムスキーマファイルの属性の定義 リンクのコピーリンクがクリップボードにコピーされました!
スキーマファイルの属性は、attributeTypes
属性の値として定義します。
例7.3 属性の定義
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
属性定義には、次のコンポーネントが含まれています。
- ドット区切りの番号として指定された一意のオブジェクト識別子 (OID)。
-
NAME attribute_name
形式の一意の名前。 -
DESC description
形式の説明。 -
SYNTAX OID
形式の属性値の OID。LDAP 属性構文の詳細は、RFC 4517 を参照してください。 - オプション: 属性が定義されているソース。
7.5.3. カスタムスキーマファイルでのオブジェクトクラスの定義 リンクのコピーリンクがクリップボードにコピーされました!
スキーマファイルのオブジェクトクラスは、objectClasses
属性の値として定義します。
例7.4 オブジェクトクラスの定義
objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
オブジェクトクラス定義には、次のコンポーネントが含まれています。
- ドット区切りの番号として指定された一意のオブジェクト識別子 (OID)。
-
NAME attribute_name
形式の一意の名前。 -
DESC description
形式の説明。 -
SUP object_class
形式のこのオブジェクトクラスの上位 (親) オブジェクトクラス。関連する親がない場合は、SUP top
を使用します。 -
STRUCTURAL
という単語は、オブジェクトクラスが適用されるエントリーのタイプを定義します。すべてのエントリーは、少なくとも 1 つのSTRUCTURAL
オブジェクトクラスに属している必要があります。AUXILIARY
は、すべてのエントリーに適用できることを意味します。 -
必須属性のリスト。前に
MUST
キーワードが付きます。複数の属性を含めるには、グループを括弧で囲み、属性を `$ ` (ドル記号とスペース) で区切ります。 -
MAY
キーワードが前に付いたオプションの属性のリスト。複数の属性を含めるには、グループを括弧で囲み、属性を `$ ` (ドル記号とスペース) で区切ります。
名前と OID のみが必要であり、その他の設定はオブジェクトクラスのニーズによって異なります。
7.5.4. 属性およびオブジェクトクラスのカスタムスキーマファイルの手動での作成 リンクのコピーリンクがクリップボードにコピーされました!
カスタムスキーマを手動で作成する場合は、それを /etc/dirsrv/slapd-<instance_name>/schema/99user.ldif
ファイルに保存します。別のファイル名を使用することも可能ですが、他のファイルに格納されているスキーマ定義がレプリケートされ、レプリカの /etc/dirsrv/slapd-<instance_name>/schema/99user.ldif
に格納されるなどの欠点があります。Directory Server がレプリケーション環境でスキーマの更新を管理する方法 を参照してください。
この手順により、以下が追加されます。
-
OID
2.16.840.1.1133730.2.1.123
および構文Directory String
(OID1.3.6.1.4.1.1466.115.121.1.15
) を持つdateOfBirth
という名前の単一値属性 -
exampleperson
という名前のオブジェクトクラス (親オブジェクトクラス (SUP top
) がなく、dateOfBirth
属性が含まれる必要あり)
手順
/etc/dirsrv/slapd-<instance_name>/schema/99user.ldif
ファイルのdn: cn=schema
エントリーの下に次のコンテンツを追加します。attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' ) objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' ) objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow スキーマの再読み込みタスクを実行します。
dsconf <instance_name> schema reload
# dsconf <instance_name> schema reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証手順:
/var/log/dirsrv/slapd-<instance_name>/errors
ファイルを監視します。ビルドが成功すると、Directory Server は次のログを記録します。
[23/Sep/2021:13:47:33.334241406 +0200] - INFO - schemareload - schemareload_thread - Schema reload task starts (schema dir: default) ... [23/Sep/2021:13:47:33.415692558 +0200] - INFO - schemareload - schemareload_thread - Schema validation passed. [23/Sep/2021:13:47:33.454768148 +0200] - INFO - schemareload - schemareload_thread - Schema reload task finished.
[23/Sep/2021:13:47:33.334241406 +0200] - INFO - schemareload - schemareload_thread - Schema reload task starts (schema dir: default) ... [23/Sep/2021:13:47:33.415692558 +0200] - INFO - schemareload - schemareload_thread - Schema validation passed. [23/Sep/2021:13:47:33.454768148 +0200] - INFO - schemareload - schemareload_thread - Schema reload task finished.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ビルドが失敗した場合、Directory Server は失敗した手順とその理由をログに記録します。