用Php如何操作LDAP

2022-03-12 05:17:27 字數 4106 閱讀 3917

1 ldap是什麼

ldap是乙個用來發布目錄資訊到許多不同資源的協議。通常它都作為乙個集中的位址本使用,不過根據組織者的需要,它可以做得更加強大。

ldap最基本的形式是乙個連線資料庫的標準方式。該資料庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。要特別注意的是,ldap通常作為乙個hierarchal資料庫使用,而不是乙個關聯式資料庫。因此,它的結構用樹來表示比用**好。正因為這樣,就不能用sql語句了。

簡單說來,ldap是乙個得到關於人或者資源的集中、靜態資料的快速方式。

ldap是輕量目錄訪問協議(lightweight directory access protocol)的縮寫,其實是一話號碼簿,類似於我們所使用諸如nis(network information service)、dns (domain name service)等網路目錄,也類似於你在花園中所看到的樹木。 

ldap是一種特殊的資料庫。但是ldap和一般的資料庫不同,明白這一點是很重要的。 ldap對查詢進行了優化,與寫效能相比ldap的讀效能要優秀很多。

1.1 ldap的儲存規則

區分名(dn,distinguished name) 

和自然界中的樹不同,檔案系統/ldap/**號碼簿目錄的每一片枝葉都至少有乙個獨一無二的屬性,這一屬性可以幫助我們來區別這些枝葉。 

在檔案系統中, 這些獨一無二的屬性就是帶有完整路徑的檔名。比如/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為組織單元,最多可以有四級,每級最長32個字元,可以為中文;

o=organization 為組織名,可以3—64個字元長

c=country為國家名,可選,為2個字元長

ldap目錄以一系列「屬性對」的形式來儲存記錄項,每乙個記錄項包括屬性型別和屬性值(這與關係型資料庫用行和列來訪問資料有根本的不同)。

mail = [email protected]

othermailbox = [email protected]

givenname = givenname

sn = test sn

屬性可新增,以下乙個屬性必須賦值:

objectclass=person (值為:person 或 server 或 organization 或 其他自定義的值)

2 php如何操作ldap

2.1 php如何與ldap連線和關閉

$ds=ldap_connect("servername")

servername是ldap的伺服器名,

例: $ds=ldap_connect(「10.31.172.30:1000」)

返回值是:true 或 false

關閉連線

ldap_close($ds);

2.2 在php中如何搜尋使用者資訊

$ds=ldap_connect("10.31.172.30:1000");

//首先連線上伺服器

$justthese = array("cn","userpassword",」location」);

//搜尋函式中的乙個引數,要求返回哪些資訊,

//以上傳回cn,userpassword,location,這些都要求小寫

$sr=ldap_search($ds,"o=jite", "cn=dom*",$justthese); 

//第乙個引數開啟ldap的代號

//第二個引數最基本的 dn 條件值 , 例:」o=jite,c=cn」

//第三個引數 filter 為布林條件,它的語法可以在 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"]."筆:";

for ($i=0; $i<$info["count"]; $i++)

2.3 新增使用者

$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"; 

$info["location"]="shanghai";

$info["objectclass"] = "person"; //必填person為個人,還有server…

ldap_add($ds, "cn=".$info["cn"].",o=jite", $info);

ldap_unbind($ds);

//取消繫結

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"; 

//使用者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"))else

ldap_unbind($ds);

//取消繫結

ldap_close($ds);

//關閉連線

php怎麼訪問ldap,用PHP如何操作LDAP

1 ldap是什麼 ldap是乙個用來發布目錄資訊到許多不同資源的協議。通常它都作為乙個集中的位址本使用,不過根據組織者的需要,它可以做得更加強大。ldap最基本的形式是乙個連線資料庫的標準方式。該資料庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。要非凡注重的...

LDAP操作例子

查詢的 include ldap.h include stdio.h int main 設定伺服器版本 version ldap version3 ldap set option ld,ldap opt protocol version,version 繫結伺服器 if ldap bind s ld...

用C語言操作LDAP伺服器

畢竟用php操作ldap有侷限性,因為當我們用生成證書的函式生成證書以後不可能再用php去給ldap增加條目,所以最近研究了一下c語言操作ldap,希望能對大家有點借鑑意義,有錯誤的地方還請原諒。至於如何安裝,執行和測試ldap伺服器請看http infosecurity.forum read.ph...