LDAPについて綴ってみる(その1)

ようやく、OpenSolarisOpenLDAP連携が「とりあえず動く」状態に!!
とはいうものの、LDAPについて語るにはあまりにも知識不足。
LDAPという迷宮に迷い込んでしまったようです。

そこで、今回は「LDAP」とはなにか自分の知識をまとめるという意味で
綴ってみたいと思います。
※いろいろと勘違いがあるかと思いますので、ご指摘いただければ幸いです。

LDAPとは

LDAP(Lightweight Directory Access Protocol)とは、ディレクトリサービスに接続
するためのプロトコルのひとつです。
ディレクトリサービスというと、WindowsのActive DirecotryやSun Microsystems
Direcotry Serverなどが有名ですが、要はコンピュータネットワーク上のさまざまな
資源(ユーザアカウントやグループ、ホスト情報など)を一元管理するためのサービス
です。

RFC(LDAPv2) RFC1777 Lightweight Directory Access Protocol
OSI参照モデル プレゼンテーション層(第6層)
トランスポート TCP port289
LDAPに関するRFCの一覧はこちらをご覧ください。

取り扱うデータは?

LDAPを一言でいうならば、資源情報を管理するための「データベース」なのですが、
一般的なOracleMySQLPostgreSQLなどのRDBMSとはデータ構造が異なります。



LDAP RDBMS
用途 検索性能重視、頻繁な更新には向かない 検索だけでなく頻繁な更新も重視
データ構造 ツリー構造 表構造
スキーマ 既存のスキーマ(objectClass) 業務にあわせて個別に設計
操作 LDAP(ネットワークプロトコル) SQL(プログラマブル言語)
検索 木の枝葉をたどるイメージ 表の行を走査するイメージ
なお、検索方法で「木の枝葉をだどるイメージ」と記しましたが、ひとつひとつの
枝葉(Entry)は一意の情報でなくてはなりません。

スキーマ

さて、データ構造について説明しましたが、どのようにデータを保持するのでしょうか。
RDBMSでは、「CREATE TABLE」文を使用してスキーマ(表)を作成します。
LDAPでは、「Attribute」と「objectClass」によって取り扱う情報を定義します。

Attribute(アトリビュート)とは、取り扱うデータの属性が定義されます。RDBMSでいう
ところのフィールドに該当します。
objectClassは、このAttributeをまとめ制約条件を記載したオブジェクトとなります。
一般的にはAttributeとobjectClassはRFCにて定義されているものを使用します。
たとえ話ですが、以下の3つの入力項目をもつアドレス帳があったとるすと、、、

項目名 入力規制(型)
氏名 文字列
電話番号 数字、ハイフン、#、*
住所 文字列
備考 文字列
各、「項目名」と「入力規制(型)」を定義するのが、Attributeにあたります。 そして、アドレス帳に必要な情報(ここでは「氏名」「電話番号」「住所」「備考」)を
まとめるのがobjectClassになります。
そして、制約条件とは「氏名」は必須で、「電話番号」または「住所」を記載。「備考」は
任意でなどという情報の適正化を指定する機能となります。