エルダップ【LDAP】
LDAP
LDAP
読み方:エルダップ
LDAPとは、ディレクトリサービスにアクセスするプロトコルのことである。
ディレクトリサービスのネットワーク規格であるX.500では、ネットワーク上のユーザー情報や、マシン情報などを一元管理して、検索をはじめとするさまざまな機能が容易に行えるようになっている。
このX.500のプロトコルの1つにDAP(Directory Access Protocol)がある。しかし、DAPは、複雑な仕様であるため、インターネットでの使用には適さない。そこで、X.500プロトコルをサポートするディレクトリサーバにおいて、DAPを補完する目的でLDAPが規定された。
LADPは、1993年に規定され、1997年に性能向上と分散化を目的としてLDAPv3が規定された。
参照リンク
Lightweight Directory Access Protocol (v3) - (LDAPに関するRFCの日本語訳)
LDAP 関数
導入
LDAP とは Lightweight Directory Access Protocol を意味し、 "ディレクトリサーバ" にアクセスするために使用されるプロトコルです。 ディレクトリとは、 ツリー構造に情報を保持している特殊なデータベースのことです。この概念は、ハードディスクのディレクトリ構造に似ています。 ただし、その内容は異なっており、ルートディレクトリは "世界" であり、 最初のレベルのサブディレクトリは "国" となります。ディレクトリ構造の 下位には会社や機関、場所のエントリがあります。さらに下位には、 人やおそらく道具や文書に関するディレクトリエントリもあります。
ハードディスク内のサブディレクトリにあるファイルを参照するには、 次のようにすることでしょう。
/usr/local/myapp/docs
スラッシュが参照の各部分を区分し、左から右に解釈されます。
LDAP においてこの完全に正しいファイル参照に等価なものは "区分された名前(distinguished name)" であり、単に "dn" と表されます。 例として dn が次のようになっているとしましょう。
cn=John Smith,ou=Accounts,o=My Company,c=US
カンマは各部分を区分し、右から左に解釈されます。この dn は 次のように解釈されます。
country = US
organization = My Company
organizationalUnit = Accounts
commonName = John Smith
ハードディスクのディレクトリ構造を管理する手法について明確な規約が ないのと同様に、ディレクトリサーバーマネージャーは、目的に適した あらゆる構造を設定することが可能です。しかし、実用的にはいくつかの 慣習があります。 利用可能なものに関する情報を持たずにデータベースを使用することが できないのと同様、ディレクトリの構造に関する情報なくして ディレクトリサーバーにアクセスするコードを書くことはできない ということが言えます。
LDAP に関する多くの情報が以下の場所にあります。
Netscape SDK では、有用な » プログラマーズガイド が HTML 形式で公開されています。
要件
LDAP サポートを有効にして PHP をコンパイルするには、 » OpenLDAP あるいは » Bind9.net から LDAP クライアント ライブラリを入手し、コンパイルしておく必要があります。インストール手順
PHP の LDAP サポートはデフォルトで有効になっていません。 LDAP サポートを有効にして PHP をコンパイルするには、設定オプション --with-ldap[=DIR] を指定して PHP をコンパイルする必要があります。 DIR は LDAP をインストールしたディレクトリです。 SASL サポートを有効にするためには、システム上に sasl.h を用意し、 --with-ldap-sasl[=DIR] を指定する必要があります。Win32 ユーザへの注意: Windows 環境でこの拡張モジュールを有効にするには、 PHP/Win32 バイナリパッケージの DLL フォルダから Windows マシンの SYSTEM32 フォルダ(例: C:\WINNT\SYSTEM32 または C:\WINDOWS\SYSTEM32) に DLL ファイルをコピーする必要があります。 PHP <= 4.2.0ならば libsasl.dll、PHP <= 4.3.0 ならば libeay32.dll と ssleay32.dll を SYSTEM32 フォルダにコピーしてください。
Oracle LDAP ライブラリを使用するには、Oracle 環境 が適切に設定されている 必要があります。
実行時設定
php.ini の設定により動作が変化します。表 146. LDAP 設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
ldap.max_links | "-1" | PHP_INI_SYSTEM |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
リソース型
リソース型は定義されていません。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。- LDAP_DEREF_NEVER (integer)
- LDAP_DEREF_SEARCHING (integer)
- LDAP_DEREF_FINDING (integer)
- LDAP_DEREF_ALWAYS (integer)
- LDAP_OPT_DEREF (integer)
- LDAP_OPT_SIZELIMIT (integer)
- LDAP_OPT_TIMELIMIT (integer)
- LDAP_OPT_PROTOCOL_VERSION (integer)
- LDAP_OPT_ERROR_NUMBER (integer)
- LDAP_OPT_REFERRALS (integer)
- LDAP_OPT_RESTART (integer)
- LDAP_OPT_HOST_NAME (integer)
- LDAP_OPT_ERROR_STRING (integer)
- LDAP_OPT_MATCHED_DN (integer)
- LDAP_OPT_SERVER_CONTROLS (integer)
- LDAP_OPT_CLIENT_CONTROLS (integer)
- LDAP_OPT_DEBUG_LEVEL (integer)
- GSLC_SSL_NO_AUTH (integer)
- GSLC_SSL_ONEWAY_AUTH (integer)
- GSLC_SSL_TWOWAY_AUTH (integer)
例
あるディレクトリサーバーから姓が "S" から始まる全てのエントリに 関する情報を検索し、名前と電子メールアドレスで検索結果を表示します。例 1014. LDAP 検索の例
<?php
// LDAP の基本シーケンスは、接続、バインド、検索、検索結果の解釈、
// 接続のクローズです。
echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost"); // 有効な LDAP サーバーに違いない!
echo "connect result is " . $ds . "<br />";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // これは "匿名" バインドで、通常は
// 読みこみのみのアクセスとなります。
echo "Bind result is " . $r . "<br />";
echo "Searching for (sn=S*) ...";
// 名前(surname)エントリを検索
$sr=ldap_search($ds, "o=My Company, c=US", "sn=S*");
echo "Search result is " . $sr . "<br />";
echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";
echo "Getting entries ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Data for " . $info["count"] . " items returned:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: " . $info[$i]["dn"] . "<br />";
echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
?>
PHP LDAP コールの使用法
LDAP コールを使用する前に、以下のことを知っておいてください。-
使用するディレクトリサーバの名前またはアドレス
-
サーバの "base dn" (このサーバーがあるワールドディレクトリ
の部分で、"o=My Company,c=US" のようにすることができます)
-
サーバーへのアクセスにパスワードを必要とするかどうか
(多くのサーバーは "匿名バインド" に関して読みこみを
許可するが、他の処理についてはパスワードを要求します)。
アプリケーションとして作成する LDAP コールのシーケンスは、 通常、次のようなパターンに沿っています。
ldap_connect() // サーバへの接続を確立
|
ldap_bind() // 匿名または認証された "ログイン"
|
ディレクトリの検索または更新等を行い、結果を表示する
|
ldap_close() // "ログアウト"
目次
- ldap_8859_to_t61 — 8859 文字を t61 文字に変換する
- ldap_add — LDAP ディレクトリにエントリを付加する
- ldap_bind — LDAP ディレクトリにバインドする
- ldap_close — ldap_unbind() のエイリアス
- ldap_compare — DN で指定したエントリで見付かった属性の値を比較する
- ldap_connect — LDAP サーバへ接続する
- ldap_count_entries — サーチ時のエントリ数をカウントする
- ldap_delete — ディレクトリからエントリを削除する
- ldap_dn2ufn — DN をユーザに分かりやすい名前のフォーマットに変換する
- ldap_err2str — LDAP のエラー番号をエラーメッセージ文字列に変換する
- ldap_errno — 直近の LDAP コマンドの LDAP エラー番号を返す
- ldap_error — 直近の LDAP コマンドの LDAP エラーメッセージを返す
- ldap_explode_dn — DN を構成要素毎に分割する
- ldap_first_attribute — 最初の属性を返す
- ldap_first_entry — 最初の結果 ID を返す
- ldap_first_reference — 最初のリファレンスを返す
- ldap_free_result — 結果メモリを開放する
- ldap_get_attributes — サーチ結果エントリから属性を得る
- ldap_get_dn — 結果エントリから DN を得る
- ldap_get_entries — 全ての結果エントリを得る
- ldap_get_option — 指定したオプションの現在の値を得る
- ldap_get_values_len — 結果エントリから全てのバイナリ値を得る
- ldap_get_values — 結果エントリから全ての値を得る
- ldap_list — シングルレベル探索を行う
- ldap_mod_add — 現在の属性に属性を追加する
- ldap_mod_del — 現在の属性から属性を削除する
- ldap_mod_replace — 属性を新規の値に置換する
- ldap_modify — LDAP エントリを修正する
- ldap_next_attribute — 結果における次の属性を得る
- ldap_next_entry — 次の結果エントリを得る
- ldap_next_reference — 次のリファレンスを得る
- ldap_parse_reference — 参照エントリから情報を展開する
- ldap_parse_result — 結果から情報を展開する
- ldap_read — エントリを読み込む
- ldap_rename — エントリ名を修正する
- ldap_sasl_bind — SASL を使用して LDAP ディレクトリにバインドする
- ldap_search — LDAP ツリーを探索する
- ldap_set_option — 指定したオプションの値を設定する
- ldap_set_rebind_proc — 参照先を再バインドするためのコールバック関数を設定する
- ldap_sort — LDAP 結果エントリをソートする
- ldap_start_tls — TLS を開始する
- ldap_t61_to_8859 — t61 文字を 8859 文字に変換する
- ldap_unbind — LDAP ディレクトリへのバインドを解除する
Lightweight Directory Access Protocol
![]() | この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。 |
TCP/IP群 |
---|
アプリケーション層 |
|
トランスポート層 |
カテゴリ |
インターネット層 |
カテゴリ |
リンク層 |
カテゴリ |
Lightweight Directory Access Protocol(ライトウェイト ディレクトリ アクセス プロトコル、LDAP:エルダップ)は、ディレクトリ・サービスに接続するために使用される通信プロトコルの一つ。
概要
ITU勧告X.500モデルをサポートするディレクトリに対するアクセスを提供するために設計された。 一方で、X.500ディレクトリアクセスプロトコル(Directory Access Protocol : DAP)の資源要求は課されない。 本プロトコルは、特にディレクトリに対する対話的な読み込み/書き込み(read/write)アクセスを提供する管理アプリケーションやブラウザアプリケーションを対象とする。 X.500プロトコルをサポートするディレクトリと共に使用する際に、X.500のDAPを補完するものとなることが意図されている。
コンピュータネットワークでは、ネットワークを構成する機器が多くなるにつれて扱うべきネットワーク・リソースが増大する。 DAP が登場した背景には、個々に異なるディレクトリ・サービスを扱うよりも、統一されたプロトコルで拡張可能な情報にアクセスする方法が求められるようになったことが挙げられる。 上述の X.500 シリーズは、分散可能な統合案内サービスとして優れた機能を有していたものの、DAP が複雑なため処理が重たく、TCP/IP によるインターネットでは使用されにくいという欠点があった。
「X.500の90%の機能を10%のコストで実現する」というキャッチフレーズのもと、DAPの問題点を洗い出し、再設計が行われたLDAPv2がIETFによって RFC 1777 として標準化された。LDAPv2 では、LDAP サーバは X.500 のフロントエンドとして機能し、分散化は X.500 が担っている。
LDAPv2は、その後分散化を実現するLDAPv2+、さらに国際化やセキュリティ強化がなされたLDAPv3(RFC 2251)へと進化している。
LDAP の処理系は、OpenLDAP により、オープンソースで提供されているものをはじめ、各種の製品が存在している。
LDAPとX.500の違い
LDAPはX.500のDAPを軽量化したものである。
しかし、X.500ではDAP以外にDSP,DOP,DISPといったプロトコルが規定されている。
つまりLDAPにはこの3つのプロトコルが存在しないことになる。
- DUA(Directory User Agent):ディレクトリの利用者に代わってディレクトリにアクセスする機能(プログラムやコマンド、ライブラリ)
- DSA(Directory Service Agent):ディレクトリ情報を管理する個々のシステム。ディレクトリはDSAの集合体として構成される。
- DAP(Directory Access Protocol):DSAがDUAに対してディレクトリサービスを提供するためのプロトコル
- DSP(Directory System Protocol):DSA間で分散協調動作(連鎖や紹介)を行うためのプロトコル
- DOP(Directory Operational binding management Protocol):ディレクトリ運用結合管理プロトコル。DSA間の運用結合の規定内容や状態の交換に用いられるプロトコル
- DISP(Directory Information Shadowing Protocol):DSA間で複製情報を交換するためのプロトコル
X.500のDAPはOSI各層の標準プロトコルを使用する。
LDAPはTCP/IPの上に実装されるため、DAPにあるROSE,RTSE,ACSEを実装していない。
(これらの機能はTCP/IPの中で実装されているのでLDAPでは不要)
- ROSE(Remote Operation Service Element):遠隔操作サービス要素、処理の依頼と結果の通知という通信メカニズムを実現するプロトコル要素
- RTSE(Reliable Transfer Service Element):高信頼転送サービス要素、通信経路障害などによって情報の欠落や重複が起きないようにするプロトコル要素
- ACSE(Association Control Service Element):アソシエーション制御サービス要素、コネクションの確立、正常開放、異常解放を行うサービス要素
代表的なLDAP実装
- NetIQ eDirectory (NetIQ)
- Oracle Internet Directory(オラクル)[リンク切れ]
- Sun Java System Directory Server(サン・マイクロシステムズ)
- Sun OpenDS(サン・マイクロシステムズ)
- StarDirectory(日本電気)
- 389 Directory Server(レッドハット)
- InfoDirectory(富士通)
- Sendmail Directory Server
- OpenLDAP
- Tivoli Directory Server (IBM)
- Active Directory(マイクロソフト)
- Apache Directory Server
- LDAPのページへのリンク