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
ハードディスクのディレクトリ構造を管理する手法について明確な規約が
ないのと同様に、ディレクトリサーバーマネージャーは、目的に適したあ
らゆる構造を設定することが可能です。しかし、実用的にはいくつかの慣
習があります。
利用可能なものに関する情報を持たずにデータベースを使用する
ことができないのと同様にディレクトリの構造に関する情報なくして
ディレクトリサーバーにアクセスするコードを書くことはできない
ということが言えます。
完全なコードの例
あるディレクトリサーバーから姓が "S" から始まる全てのエントリに
関する情報を検索し、名前と電子メールアドレスで検索結果を表示します。
例 1LDAP 検索の例 <?php
// LDAP の基本シーケンスは、接続、バインド、検索、検索結果の解釈、
// 接続のクローズです。
echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost"); // 有効な LDAP サーバーに違いない!
echo "connect result is ".$ds."<p>";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // これは "匿名" バインドで、通常は
// 読みこみのみのアクセスとなります。
echo "Bind result is ".$r."<p>";
echo "Searching for (sn=S*) ...";
// 名前(surname)エントリを検索
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Search result is ".$sr."<p>";
echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";
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] ."<p>";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
?> |
|
PHP LDAP コールの使用法
ミシガン大の ldap-3.3 パッケージまたは Netscape Directory SDK
3.0 のどちらかから完全な LDAP クライアントライブラリを取得する必
要があります。また、PHP の LDAP コールを動作させるには、
PHP を LDAP サポートを有効にして再コンパイルする必要があります。
LDAP コールを使用する前に、以下のことを知っておいてください。
使用するディレクトリサーバーの名前またはアドレス
サーバーの "base dn" (このサーバーがあるワールドディレクトリ
の部分で、"o=My Company,c=US" のようにすることができます)
サーバーへのアクセスにパスワードを必要とするかどうか。
(多くのサーバーは "匿名バインド" に関して読みこみを
許可するが、他の処理についてはパスワードを要求します)
アプリケーションとして作成する LDAP コールのシーケンスは、
通常、次のようなパターンに沿っています。
ldap_connect() // サーバーへの接続を確立
|
ldap_bind() // 匿名または認証された "ログイン"
|
ディレクトリの検索または更新等を行い、結果を表示する
|
ldap_close() // "ログアウト"
他の情報
LDAP に関する多くの情報を以下の場所で得ることができます。
ネットスケープ SDK には、.html 形式の有用なプログラマー用ガイドが
含まれています。