9. 分散ディレクトリサービスの構築
多くのサイトにおいては、サブツリー全体のデータを保持した slapd(8) を一つ以上動かしておけば十分です。しかし、ある slapd がツリーの 一部を保有する他のディレクトリサービスを参照する必要があるということは よくあります(この場合、他のディレクトリサービスが slapd で運用されているとは限りません)。
slapd は下位(subordinate)と上位(superior) の知識情報をサポートします。
9.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)に似ています。
9.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
9.3. ManageDsaIT 制御
紹介オブジェクトの追加、更新、削除は、 一般に ldapmodify(1) あるいは 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 属性の操作はできますが、検索結果に取り出されるように するには明示的にリクエストしなければなりません。