12. 分散ディレクトリサービスの構築
多くのサイトにおいては、サブツリー全体のデータを保持した slapd(8) を一つ以上動かしておけば十分です。しかし、ある slapd がツリーの一部を保有する他のディレクトリサービスを参照する必要があるということはよくあります(この場合、他のディレクトリサービスが slapd で運用されているとは限りません)。
slapd は下位(subordinate)と上位(superior) の知識情報をサポートします。下位知識情報は紹介オブジェクト(RFC3296)に保持されます。
12.1. 下位知識情報
下位知識情報(subordinate knowledge information)はサブツリーを委譲するために提供されます。下位知識情報は、ディレクトリ内の委譲ポイントに置く特殊な紹介(referral)オブジェクトとして管理されます。紹介オブジェクトは、二つのサービスを繋げる委譲ポイントとして振る舞います。この機構により階層化されたディレクトリサービス群を構築できます。
紹介オブジェクトは、構造型オブジェクトクラス referral を持ち、委譲されるサブツリーと同じ識別名(
サーバ a.example.net が dc=example,dc=net を保有していて、それがサブツリーの委譲を行うようにしたければ、次のような名前つきの紹介オブジェクトを a.example.net に追加します。
dn: dc=subtree,dc=example,dc=net objectClass: referral objectClass: extensibleObject dc: subtree ref: ldap://b.example.net/dc=subtree,dc=example,dc=net
サーバは、下位サーバへの紹介の生成と検索の継続を行うためにこの情報を利用します。
X.500 をよく知る人のために補足しておきますと、 名前つきの紹介オブジェクトは subr に保有された X.500 知識参照(knowledge reference)に似ています。
12.2. 上位知識情報
上位知識情報は referral ディレクティブを用いて指定します。このディレクティブの値は、上位ディレクトリサービスを紹介する
referral ldap://root.openldap.org/
しかし、a.example.net が b.example.net の直接の上位であるならば、b.example.net は次のように設定されます。
referral ldap://a.example.net/
サーバは、そのサーバ内あるいはサーバによって保有される命名コンテキスト(naming context)に対応する下位サーバにないエントリに対する操作への紹介を生成するのにこの情報を利用します。
X.500 をよく知る人のために補足しておきますと、この referral ディレクティブの利用は、Supr
12.3. ManageDsaIT 制御
紹介オブジェクトの追加、更新、削除は、一般に ldapmodify(1) あるいは ManageDsaIT 制御をサポートした同種のツールを利用して行います。ManageDsaIT 制御は、紹介オブジェクトを通常のエントリと同じように扱うということをサーバに知らせます。これは、紹介オブジェクトを問合せたり更新する要求に対してサーバが紹介を送らないようにします。
通常のエントリの管理では ManageDsaIT 制御を使うべきではありません。
ldapmodify(1) (およびその他のツール)の -M オプションは、 ManageDsaIT を有効にします。たとえば次のように使います。
ldapmodify -M -f referral.ldif -x -D "cn=Manager,dc=example,dc=net" -W
ldapsearch(1) なら次のように使います。
ldapsearch -M -b "dc=example,dc=net" -x "(objectclass=referral)" '*' ref
注記:ref 属性の操作はできますが、検索結果に取り出されるようにするには明示的にリクエストしなければなりません。