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

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

slapd下位(subordinate)と上位(superior) の知識情報をサポートします。下位知識情報は紹介オブジェクト(RFC3296)に保持されます。

12.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)に似ています。

12.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 知識参照に似ています。

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