9. 分散ディレクトリサービスの構築

多くのサイトにおいては、サブツリー全体のデータを保持した slapd(8) を一つ以上動かしておけば十分です。しかし、ある slapd がツリーの 一部を保有する他のディレクトリサービスを参照する必要があるということは よくあります(この場合、他のディレクトリサービスが slapd で運用されているとは限りません)。

slapd下位(subordinate)と上位(superior) の知識情報をサポートします。

9.1. 下位知識情報

下位知識情報(subordinate knowledge information)はサブツリーを 委譲するために提供されます。下位知識情報は、ディレクトリ内の 委譲ポイントに置く特殊な紹介(referral)オブジェクトとして 管理されます。紹介オブジェクトは、二つのサービスを繋げる委譲 ポイントとして振る舞います。この機構により階層化された ディレクトリサービス群を構築できます。

紹介オブジェクトは、構造型オブジェクトクラス referral を持ち、委譲されるサブツリーと同じ識別名(DN)を持ちます。 一般に、紹介オブジェクトは補助型のオブジェクトクラス extensibleObject も持ちます。これにより、エントリが適切な 相対識別名(RDN)を持てます。これについては 例を見てもらうのが一番です。

サーバ a.example.netdc=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 ディレクティブを用いて指定します。 このディレクティブの値は、上位ディレクトリサービスを紹介する URI のリストです。先の例での a.example.net のように直接の上位のないサーバにおいては、OpenLDAP Root Service (http://www.openldap.org/faq/index.cgi?file=393) のようなグローバル知識のあるディレクトリサービスを使うように 構築できます。

        referral        ldap://root.openldap.org/

しかし、a.example.netb.example.net の直接の 上位であるならば、b.example.net は次のように設定されます。

        referral        ldap://a.example.net/

サーバは、そのサーバ内あるいはサーバによって保有される 命名コンテキスト(naming context)に対応する下位サーバにない エントリに対する操作への紹介を生成するのに この情報を利用します。

X.500 をよく知る人のために補足しておきますと、この referral ディレクティブの利用は、Supr DSE に保有された X.500 知識参照に似ています。

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 属性の操作はできますが、検索結果に取り出されるように するには明示的にリクエストしなければなりません。