什麼是LDAP

來源:互聯網
上載者:User
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 = testmail@mccc.net
othermailbox = testmailother@mccc.com
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)." 個<p>";
//ldap_count_entries($ds,$sr)傳回記錄總數

$info = ldap_get_entries($ds, $sr);
//LDAP的全部傳回資料
echo "資料傳回 ".$info["count"]."筆:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn為:". $info[$i]["dn"] ."<br>";
echo "cn為:". $info[$i]["cn"][0] ."<br>"; //顯示使用者名稱
echo "email為:". $info[$i]["mail"][0] ."<p>"; //顯示mail
echo "email為:". $info[$i][“userpassword"][0] ."<p>"; //顯示加密後的密碼
}
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")){
echo "驗證通過";
}else{
echo "驗證不通過";
}
ldap_unbind($ds);
//取消綁定
ldap_close($ds);
//關閉串連




註:此方法比較簡單,實用,它也有不足之處,如果不通過,ldap_bind()提示它內建的提示:”Warning: LDAP: Unable to bind to server: Inappropriate authentication in /home/htdocs/jldl.net/ldap/test.php3 on line 16”

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。