3 Minutes NetWorking Supplement
No.10

3Minutes NetWorking Supplement

補講第10回LDAP(2) LDAPモデル

■ X.500

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

さてさて。前回ディレクトリサービスについて話したけど。
今回からは現在、ディレクトリサービスの中で最も注目を浴びているLDAPについて話すわね。 ▼ link

ほげたん

え? そんなに注目を浴びてるの?

おねーさん

さぁ?

ほげたん

うわ。

おねーさん

まぁ、そういうことにしておくと話が早いのよ。
ともかく、ほげたん? LDAPって、Lightweight Directory Access Protocolだけど、最後のDAPはともかく、Lightweightって変な名前じゃない?

ほげたん

ライトウェイト? 「軽量の」?
言われてみればそうかなぁ、「軽量の」「ディレクトリアクセスプロトコル」。何に対して「軽量」なのかな?

おねーさん

うんうん。ポイントはそこよね。何かがあって、それに比べて「軽量」なのがLDAPなの。
その「何か」だけど。それは、X.500という規格が前提にあっての話なの。▼ link

ほげたん

アルファベット1文字で始まる規格はITU-T。

おねーさん

ぷっ、なにそれ? 確かにそうだけど。
X.500はITU-Tが国際標準として規格化したディレクトリサービスについての標準規格よ。

ほげたん

それとLDAPにどういう関連性が?

おねーさん

まぁまぁ、順番に話させてよ。
X.500によるディレクトリサービスは、簡単に書くとこんな感じ。

X.500ディレクトリサービス

[FigureSP10-01:X.500ディレクトリサービス]

ほげたん

クライアントがDUA、サーバがDSA、検索に使うプロトコルがDAP………DAP?
Directory Access Protocol? LDAP?

おねーさん

そう。DAP。さぁ、これでLDAPが何に対して「軽量」なのかわかったわよね?

ほげたん

うん。このX.500DAPよりも「軽量」ってこと?

おねーさん

そゆことです。もともと、この国際規格X.500ってのは、ディレクトリサービスの規格として、とても優れた規格だったの。
どれぐらい優れているかっていういと、その完璧な構造と豊富な機能があまりに複雑な構造であまりに多機能で使いこなすのが大変なぐらい。

ほげたん

……ダメじゃん。

おねーさん

で、「インターネット」という環境ではさすがに実装は無理じゃないかって感じだったのね。
なので、IETFがそのX.500DSAにかる〜くアクセスできるようにって開発したのがLDAP。

ほげたん

へ〜、じゃあもともとはX.500の廉価版って感じなのかな?

おねーさん

廉価版ってのはちょっと言い方が悪いけど、そう的外れでもないかも。
で、これが思ったより便利なので、X.500DAPの代替としてだけでなく、他のディレクトリサービスにも使えるようになったわけ。

ほげたん

へ〜。

おねーさん

あとは、ITU-T、ISO/IECのOSI参照モデルから、IETFのTCP/IPモデルで運用されてるってのも大きいかも。

ほげたん

あぁ、なるほど。TCP/IPが使えるのは大きいよね。

■ LDAPモデル

おねーさん

じゃあ、実際LDAPについて説明するとしましょう。
え〜っと、どこから説明すればいいかな?

ほげたん

おね〜さん。それはないよ。

おねーさん

と言われてもねぇ。LDAPは結構大変なプロトコルなのよ、これが。
一気に説明するとなると、骨が折れるというか。まぁ、骨が折れると言っても主にほげたんのだからいいんだけど。

ほげたん

僕の!?

おねーさん

えいっ。(ポキッ)

ほげたん

ぐはっっ!!

おねーさん

そうねぇ。やっぱりモデルの話からしましょう。

ほげたん

僕、ほったらかしですか。(プラーン)

おねーさん

LDAP自体は結構いろいろな側面があるので、一気に全体を説明するのではなく、それぞれの側面ごとに説明していこうかな、っと。
で、LDAPを次のモデルに分解してみました。

  • プロトコルモデル … LDAPのプロトコル構成
  • 情報モデル … X.500ディレクトリの構造や形式
  • 名前付けモデル … LDAPで格納される情報の名前体系
  • 機能モデル … LDAPで実装される機能やサービス
  • セキュリティモデル … LDAPで提供されるセキュリティ
ほげたん

ははぁ? 何がなにやら?

おねーさん

ん、だから。LDAP全体をいくつかの「モデル」に分割したわけね。
この5つのモデルをまとめると、だいたいLDAPがわかるかなぁ、ってね。

ほげたん

ふ〜ん。で、どれから説明してくれるの?

おねーさん

そうね。並べた順でいきましょう。

ほげたん

ってことは、プロトコルモデルだね。

■ プロトコルモデル

おねーさん

LDAPはX.500DAPをTCP/IPで簡易化したもの、だったわよね。おかげでOSIプロトコルの呪縛から逃れてるわけなんだけど。

ほげたん

呪縛って。

おねーさん

LDAPはTCPを使用するアプリケーションレイヤプロトコルよ。

LDAPプロトコル

[FigureSP10-02:LDAPプロトコル]

ほげたん

TCP389番ポートと、636番。LDAPSって、SSL/TLSを使うの?

おねーさん

[LDAP over SSL]で、LDAPSね。HTTPとHTTPSの関係と同じ。

ほげたん

あぁ、なるほど。

おねーさん

で、LDAPはおなじみクライアント/サーバモデルで動作するわけね。

ほげたん

ん。おなじみだね。

LDAPプロトコルモデル

[FigureSP10-03:LDAPプロトコルモデル]

ほげたん

あれ? さっきでてきたDUAとかDSAとかの用語じゃないんだ?

おねーさん

あれはX.500の用語だからね。普通に「クライアント」「サーバ」でOK。

■ 情報モデル

おねーさん

さて、次は情報モデルね。LDAPはあくまでも、「X.500DAP」の簡易型、つまり「ディレクトリへアクセスする」ためのプロトコルでしょ?

ほげたん

ディレクトリにアクセスして、「検索」したりするプロトコルってことだよね?

おねーさん

そうそう。なので、ディレクトリについてはX.500のデータモデルを使用しているの。
あ、ただしX.500以外のディレクトリでもOKなことはOKよ。

ほげたん

あ、そうなんだ。

おねーさん

LDAPバージョン3からはX.500以外のディレクトリでもOKになってるの。
さてさて、そのX.500ディレクトリのデータモデルといえば…前回の図を見てみましょ。

ディレクトリサービス

[FigureSP09-01:ディレクトリサービス]

おねーさん

ディレクトリはエントリ属性からできている、って前回に話したわよね。
まず、現実世界にあるもの(オブジェクト)を切り取ってディレクトリに格納することからスタートね。

ほげたん

オブジェクトをディレクトリに格納する。

おねーさん

格納されたものがエントリ。で、エントリが持つ情報が属性。ここまではいい?

ほげたん

うん。そこまでは聞いたよ。

おねーさん

で、まず。オブジェクトをディレクトリに格納してエントリにするわけだけど。
オブジェクトって実世界にあるもの、人、組織、地域、国、なんでもいいんだけど、どの情報を抜き出して、ディレクトリに格納するか決めておかないと

ほげたん

現実世界にあるオブジェクト、例えば「人」だとするよね。
で、「人が持つ情報」の中から、「どの情報をエントリするか」を決めるってことでいいのかな?

おねーさん

そう。それをオブジェクトクラスというの。

オブジェクトクラス

[FigureSP10-04:オブジェクトクラス]

おねーさん

オブジェクトクラスには、エントリがどの属性を持たなければいけないかなどが決まってるわけね。

ほげたん

あぅ。クラス…。なんかもう、そのままオブジェクト指向だ。

おねーさん

で、エントリには属性がある。属性は「属性型」と「属性値」から成り立ってるの。

ほげたん

属性型と属性値? 属性値は、属性が持つ情報だってわかるけど、属性型ってなに?

おねーさん

属性型は属性値が取りうる値や検索の際の条件を決めておくの。

属性型と属性値

[FigureSP10-05:属性型と属性値]

ほげたん

なるほど。型が決まっていて、好き勝手に値を入れることができないようになってるんだ。

おねーさん

「電話番号」属性に、顔写真があったら笑っちゃうからね。
で、これら属性を持つエントリだけど、これをディレクトリに格納するわよね。

ほげたん

そりゃそうだね。しないと意味がないからね。

おねーさん

前も話したけど、ディレクトリではエントリを木構造で格納するの。
ファイルシステムのディレクトリなんかいい例よね。

ほげたん

そういえば、DNSの名前空間も木構造だよね。

おねーさん

そう言われればそうね。DNSもディレクトリサービスだからね。
で、このエントリを格納する木構造を、DITと呼ぶの。木構造の利点はわかるわよね?

ほげたん

理解しやすい。特に情報が多い場合、階層化することによって、体系化できるとか。
組織とかを表現しやすいよね。

おねーさん

そうそう。でね? 木構造にしたがってエントリを配置していくわけ。
最上位、つまり根に位置するエントリが「ルートエントリ」。で、それぞれ節にエントリを配置するってわけ。

DIT

[FigureSP10-06:DIT]

ほげたん

なんか、DNS名前空間みたいだね。

おねーさん

そうね、DNS名前空間をイメージしてもらうと一番ラクかな。
ちなみにピンクのエントリが「組織」のオブジェクトをエントリにしたもの。青のエントリが「人」のオブジェクトをエントリにしたもの、ね。

ほげたん

橙のrootは?

おねーさん

ルートエントリは特別なエントリで、DITを管理するディレクトリサーバ用の情報のエントリ。
さて、ほげたん? X.500ディレクトリの概略がわかった?

ほげたん

オブジェクトにオブジェクトクラス。エントリと属性。
そして、格納したDIT。

おねーさん

そうそう。オブジェクトクラスや属性、DITについては先で細かくやるから、まずこれらのX.500ディレクトリの基本を覚えておいてね。

ほげたん

あいあい。

おねーさん

で、他のモデルは次回にします。
おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!

LDAP
[Lightweight Directory Access Protocol]
現行はLDAPversion3(LDAPv3)。
1997年、RFC2251〜2256で定義。参考リンクはRFC2251。
X.500
ITU-TのXシリーズ規格のうち、ディレクトリについての標準規格。ISO/IECで標準化されるとISO/IEC9594になる。
参考リンクはITU-TのX.500についてのページ。規格は購入しないと読めません。
オブジェクトクラス
[ObjectClass]
DIT
[Directory Information Tree]
ディレクトリ情報ツリー。
ほげたんほげたんの今日のポイント
  • ITU-T・ISO/IECの国際標準のディレクトリ規格がX.500。
  • X.500のDAPを簡易化したものがLDAP。
  • LDAPはTCPを利用する。
  • オブジェクトをディレクトリに登録されたのが「エントリ」。
    • オブジェクトクラスによりオブジェクトをエントリする。
  • 各オブジェクトが持つ情報が「属性」
    • 属性の取りうる値などを決定するのが属性型。
    • 属性の値が属性値
  • エントリは木構造でディレクトリに格納される。それをDITと呼ぶ

3 Minutes NetWorking Supplement No.10

管理人:aji-ssz(at)selene.is.dream.jp