LDAP とは何ですか
LDAP は、ディレクトリ情報をさまざまなリソースに公開するために使用されるプロトコルです。通常、集中アドレス帳として使用されますが、主催者のニーズに応じて、より強力にすることができます。
LDAP の最も基本的な形式は、データベースに接続する標準的な方法です。データベースは読み取りクエリ用に最適化されています。そのため、クエリ結果は非常に迅速に取得できますが、更新などの他の側面でははるかに遅くなります。 LDAP は通常、リレーショナル データベースではなく、階層データベースとして使用されることに注意することが重要です。したがって、その構造はテーブルよりもツリーの方がよく表現されます。このため、SQL文は使用できません。
簡単に言えば、LDAP は人やリソースに関する一元化された静的データを迅速に取得する方法です。
LDAP は Lightweight Directory Access Protocol の略称で、実際には、NIS (ネットワーク情報サービス)、DNS (ドメイン ネーム サービス) などのツリーに使用されるネットワーク ディレクトリに似ています。庭。
LDAP は特別なデータベースです。ただし、LDAP は一般的なデータベースとは異なるため、これを理解することが重要です。 LDAP はクエリを最適化しており、読み取りパフォーマンスは書き込みパフォーマンスよりもはるかに優れています。
1.1 LDAP ストレージ ルール
識別名 (DN、識別名)
自然界の木とは異なり、ファイル システム/LDAP/電話ディレクトリの各枝と葉には少なくとも 1 つの一意の属性があり、この属性はこれらの枝と葉を区別するのに役立ちます。葉。
ファイル システムでは、これらの一意の属性はフルパスを含むファイル名です。たとえば、/etc/passwd の場合、ファイル名はこのパス内で一意です。もちろん、/usr/passwd、/opt/passwd を使用することもできますが、これらは完全なパスに基づいて一意になります。
LDAP では、エントリの識別名は「dn」または識別名と呼ばれます。この名前はディレクトリ内で常に一意です。たとえば、私の dn は「uid=aghaffar、ou=People、o=developer.ch」です。同じ dn を持つことはできませんが、「uid=aghaffar、ou=Administrators、o=developer.ch」のような dn を持つことはできます。これは、ファイル システム内の /etc/passwd および /usr/passwd の上記の例と非常に似ています。
「ou=Administrators, o=developer.ch」の uid と「ou=People, o=developer.ch」の uid という固有の属性があります。これは矛盾ではありません。
CN=Common Name はユーザー名またはサーバー名で、最大 80 文字で中国語も可能です。
OU=Organization Unit は組織単位で、最大 4 つのレベルを持つことができ、各レベルは最大 80 文字です。最大 32 文字、中国語も可能
O=Organization は組織名で、長さは 3 ~ 64 文字です
C=country は国名で、長さは 2 文字です
LDAP ディレクトリにはレコード項目が保存されます一連の「属性ペア」の形式で、各レコード項目には属性タイプと属性値が含まれます (これは、行と列を使用してデータにアクセスするリレーショナル データベースとは根本的に異なります)。
mail = testmail@mccc.net
othermailbox = testmailother@mccc.com
givenname = Givenname
sn = test sn
属性を追加でき、次の属性のいずれかに値を割り当てる必要があります:
objectclass=person (値は: 個人、サーバー、組織、またはその他のカスタマイズされた値です)
2 Php が LDAP を操作する方法
2.1 Php が LDAP に接続して閉じる方法
$ds=ldap_connect("ServerName")
ServerName は LDAP のサーバー名です。
例:
$ds=ldap_connect(
");
//まずサーバーに接続します
$justthese = array("cn","userpassword","location");
//検索関数のパラメータ、どのような情報を返す必要があります。
//上記はアップロードされて返されます。cn、userpassword、location、これらはすべて小文字が必要です
$sr=ldap_search($ds,"o=jite", "cn=dom*",$justthese) ;
//最初のパラメータは LDAP を有効にするためのコードネームです
// 2 番目のパラメータは最も基本的な dn 条件の値です。例: "o=jite,c=cn"
//3 番目のパラメータのフィルタはブール条件です、その構文は、Netscape サイトの dirsdkpg.pdf ファイルにあります。
// 'o' は組織名、'cn' はユーザー名で、ユーザー名にはワイルドカード文字 '*' を使用できます。
echo "domadmin の姓は ".ldap_count_entries($ds,$sr)."
";
//ldap_count_entries($ds,$sr) はレコードの総数を返します
$info = ldap_get_entries($ ds, $sr);
//LDAP によって返されたすべてのデータ
echo "返されたデータ".$info[" count"]."Pen:
";
for ($i=0; $i<$ info["count"]; $i++) {
echo "dn は:". $info[$i] ["dn"] ."
";
echo "cn は: ". i]["cn"][0] ."
"; //ユーザー名を表示
echo "email is:". $info[$i]["mail"][0] ."
echo "email is: ". $info[$i]["userpassword"][0] ."
"; //暗号化されたパスワードを表示します
}
2.3 userを追加します
$ds=ldap_connect("10.31 . 172.30:1000");
//まずサーバーに接続します
$r=ldap_bind($ds,"cn=domadmin,o=jite","password");
//管理者を縛ります、何か書かれています 権限
// cn=domadmin, o=jite の順序は変更できません
$info["cn"]="aaa"; //必須
$info["userpassword"]="aaa"; ]="shanghai";
$info["objectclass"] = "person" //必須人物は個人、サーバー...
ldap_add($ds, "cn=".$info["cn"; .",o=jite", $info);
ldap_unbind($ds);
//Unbind
ldap_close($ds);
//接続を閉じる
2.4 ユーザーを削除する
$ds=ldap_connect("10.31. 172.30 :1000");
//まずサーバーに接続します
ldap_bind($ds,"cn=domadmin,o=jite","password");
//管理者を削除権限でバインドします
$dn= " cn=dingxf,o=jite";
ldap_delete($ds, $dn);
//ユーザーを削除
ldap_unbind($ds);
//アンバインド
ldap_close($ds);
//接続を閉じる
2.5ユーザー情報を変更
$ds=ldap_connect("10.31.172.30:1000");
//まずはサーバーに接続
ldap_bind($ds,"cn=domadmin,o=jite","password");
/ /バインド管理者、変更権限あり
$dn="cn=dingxf,o=jite";
//User dn
$info["userpassword"]="aaa"; // 変更する情報を配列変数に入れる
$info["location"]="shanghaisdaf";
ldap_modify($ds, $dn, $info);
//関数を変更
ldap_unbind($ds);
//アンバインド
ldap_close($ds);
//接続を閉じる
2.6 ユーザーログインの検証
$ds=ldap_connect("10.31.172.30:1000");
//まずサーバーに接続します
if (ldap_bind($ds,"cn=dingxf ,o=jite ","dingxf")){
echo "検証に合格しました";
}else{
echo "検証に失敗しました";
}
ldap_unbind($ds);
//アンバインド
ldap_close($ ds);
//閉じる接続
注: この方法は比較的シンプルで実用的ですが、欠点もあります。失敗すると、ldap_bind() によって独自のプロンプトが表示されます。「警告: LDAP: サーバーにバインドできません: / での認証が不適切です。 home/htdocs/jldl.net/ldap/test.php3 16 行目