Sun Java System Directory Server Enterprise Edition 6.2 管理ガイド

Directory Server スキーマの拡張

スキーマに新しい属性を追加する場合は、それらの属性を持つオブジェクトクラスを新しく作成する必要があります。必要な属性のほとんどが含まれている既存のオブジェクトクラスに対して、新たに必要となった属性を追加すると、LDAP クライアントとの相互運用性が低下するためです。

Directory Server と既存の LDAP クライアントとの相互運用性は、標準の LDAP スキーマに依存しています。標準スキーマを変更すると、サーバーのアップグレード時にも問題が発生します。同様の理由から、標準スキーマの要素を削除することはできません。

Directory Server スキーマは cn=schema エントリの属性に保存されます。設定エントリと同様に、これは、サーバーの起動中にファイルから読み取られる、スキーマの LDAP ビューです。

Directory Server スキーマの拡張に使用する方法は、スキーマ拡張を保存するファイル名を制御するかどうかによって異なります。さらに、レプリケーションによってコンシューマに変更をプッシュするかどうかによっても異なります。次の表を参照して、特定の状況で実行する手順を判断してください。

表 11–1 スキーマの拡張方法

作業 

参照先 

レプリケーションを使用しない。カスタムスキーマファイルを追加して、スキーマを拡張する。 

「カスタムスキーマファイルによってスキーマを拡張する」

LDAP を経由してスキーマを拡張する。 

「LDAP によりスキーマを拡張する」

レプリケーションを使用する。すべてのサーバーでカスタムスキーマファイルのファイル名を維持する。 

「カスタムスキーマファイルによってスキーマを拡張する」

レプリケーションを使用する。マスターレプリカにカスタムスキーマファイルを追加して、スキーマを拡張する。次に、レプリケーションメカニズムによって、そのスキーマ拡張をコンシューマサーバーにコピーする。 

「スキーマファイルとレプリケーションを使用してスキーマを拡張する」

オブジェクトクラス、属性、ディレクトリスキーマの詳細と、スキーマの拡張のガイドラインについては、『Sun Java System Directory Server Enterprise Edition 6.2 配備計画ガイド』「ディレクトリスキーマの設計」を参照してください。標準属性およびオブジェクトクラスについては、『Sun Java System Directory Server Enterprise Edition 6.2 Man Page Reference』を参照してください。

この節では、ディレクトリスキーマを拡張する様々な方法を説明します。

カスタムスキーマファイルによるスキーマの拡張

スキーマファイルは LDIF ファイルで instance-path /config/schema/ にあります。instance-path は、Directory Server インスタンスが存在するファイルシステムディレクトリに対応します。たとえば、インスタンスは /local/ds/ などにあります。このファイルは Directory Server と Directory Server に依存するすべてのサーバーが使用する標準スキーマを定義します。ファイルと標準スキーマについては、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』『Sun Java System Directory Server Enterprise Edition 6.2 Man Page Reference』に説明しています。

サーバーは、起動時に 1 回だけスキーマファイルを読み取ります。スキーマのメモリー内の LDAP ビューの cn=schema 内にファイルの LDIF の内容が追加されます。スキーマ定義の順序には意味があるため、スキーマファイルの名前の先頭には番号がつけられ、英数字順に読み込まれます。このディレクトリに含まれるスキーマファイルには、インストール時に定義されたシステムユーザーだけが書き込み処理を実行できます。

スキーマを LDIF ファイルに直接定義するときは、X-ORIGIN フィールドの値として 'user defined' を指定することはできません。この値は、cn=schema の LDAP ビューで定義されるスキーマ要素用に予約されており、これは 99user.ldif ファイルに表示されます。

99user.ldif ファイルには、cn=schema エントリと、コマンド行または DSCC から追加されたすべてのスキーマ定義の追加 ACI が含まれます。新しいスキーマ定義を追加すると、99user.ldif ファイルは上書きされます。このファイルを変更するときは、変更が最新になるように、サーバーを直ちに再起動する必要があります。

他のスキーマファイルに定義されている標準のスキーマを変更しないでください。ただし、新しいファイルを追加して、新しい属性やオブジェクトクラスを定義することはできます。たとえば、複数のサーバーに新しいスキーマ要素を定義するには、98mySchema.ldif という名前をファイルにその要素を定義し、このファイルをすべてのサーバーのスキーマディレクトリにコピーします。次にすべてのサーバーを再起動して、新しいスキーマファイルを読み込みます。

Procedureカスタムスキーマファイルによってスキーマを拡張する

DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。

  1. 98mySchema.ldif などの独自のスキーマ定義ファイルを作成します。

    スキーマファイルの定義の構文については、http://www.ietf.org/rfc/rfc4517.txt RFC 4517 で説明されています。

  2. (省略可能) このスキーマが更新をほかのサーバーに送るマスターレプリカである場合は、レプリケーショントポロジでスキーマ定義ファイルを各サーバーインスタンスにコピーします。

    レプリケーションメカニズムでは、スキーマを含む LDIF ファイルに直接加えた変更は検出されません。そのため、マスターを再起動したあとでも、変更がコンシューマにレプリケートされません。

  3. スキーマ定義ファイルをコピーした各 Directory Server インスタンスを再起動します。

    サーバーが再起動すると、スキーマ定義が再ロードされ、変更が有効になります。

LDAP によるスキーマの拡張

スキーマは cn=schema 内の LDAP ビューによって定義されるため、ldapsearch ユーティリティーおよび ldapmodify ユーティリティーを使用してスキーマをオンラインで表示、変更することができます。しかし、変更できるスキーマ要素は、X-ORIGIN フィールドに 'user defined' という値が設定されている要素だけです。サーバーは、その他の定義に対するすべての変更処理を拒否します。

新しい要素の定義とユーザー定義の要素に対する変更は、99user.ldif ファイルに保存されます。

ProcedureLDAP によりスキーマを拡張する

DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。

始める前に

コマンド行からのスキーマ定義の変更は、正確な入力が必要な値が長いため、エラーを生じがちです。しかし、ディレクトリスキーマの更新が必要なスクリプトにこの機能を指定することができます。

  1. ldapmodify(1) コマンドを使用して、各 attributeTypes 属性値を追加または削除します。

    詳細については、「属性タイプを作成する」または 「属性タイプを削除する」を参照してください。

  2. ldapmodify(1) コマンドを使用して、各 objectClasses 属性値を追加または削除してください。

    詳細については、「オブジェクトクラスを作成する」または 「オブジェクトクラスを削除する」を参照してください。

参照

いずれかの値を変更するには、特定の値を削除してから、新しい値として値を追加する必要があります。この処理は、属性に複数の値を持つために必要です。詳細については、「複数値属性の 1 つの値の変更」を参照してください。

スキーマファイルとレプリケーションを使用したスキーマの拡張

カスタムスキーマファイルについては、「カスタムスキーマファイルによるスキーマの拡張」を参照してください。次の手順では、レプリケーションメカニズムを使用して、スキーマ拡張をトポロジのすべてのサーバーに伝達する方法を説明します。

Procedureスキーマファイルとレプリケーションを使用してスキーマを拡張する

この手順の一部として、DSCC を使用してこの作業を実行できます。詳細については、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。手順のその他の部分は、コマンド行を使用した場合にのみ実行できます。

  1. 次のいずれかの方法で、スキーマ拡張を準備します。

    • 98mySchema.ldif などの独自のスキーマ定義ファイルを作成します。

    • 99user.ldif にスキーマ拡張を追加します。

    スキーマファイルの定義の構文については、http://www.ietf.org/rfc/rfc4517.txt RFC 4517 で説明されています。

  2. スキーマ定義ファイルを配置するマスターサーバーで、schema_push コマンドを実行します。

    このスクリプトは実際にはスキーマをレプリカにプッシュしません。代わりに、このスクリプトは、スキーマファイルがロードされるとすぐにレプリケートされるように、特別な属性をスキーマファイルに書き込みます。詳細については、schema_push(1M) のマニュアルページを参照してください。

  3. スキーマ定義ファイルを配置したマスターサーバーを再起動します。

    レプリケーションメカニズムでは、スキーマを含む LDIF ファイルに直接加えた変更は検出されません。ただし、schema_push の実行後にサーバーを再起動すると、サーバーがすべてのスキーマファイルをロードし、レプリケーションメカニズムによって、新しいスキーマがコンシューマにレプリケートされます。