LDAP

          LDAP是什么
          LDAP是一個(gè)用來(lái)發(fā)布目錄信息到許多不同資源的協(xié)議。通常它都作為一個(gè)集中的地址本使用,不過(guò)根據(jù)組織者的需要,它可以做得更加強(qiáng)大。
            LDAP最基本的形式是一個(gè)連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方式。該數(shù)據(jù)庫(kù)為讀查詢作了優(yōu)化。因此它可以很快地得到查詢結(jié)果,不過(guò)在其它方面,例如更新,就慢得多。要特別注意的是,LDAP通常作為一個(gè)hierarchal數(shù)據(jù)庫(kù)使用,而不是一個(gè)關(guān)系數(shù)據(jù)庫(kù)。因此,它的結(jié)構(gòu)用樹來(lái)表示比用表格好。正因?yàn)檫@樣,就不能用SQL語(yǔ)句了。

            簡(jiǎn)單說(shuō)來(lái),LDAP是一個(gè)得到關(guān)于人或者資源的集中、靜態(tài)數(shù)據(jù)的快速方式。

          LDAP是輕量目錄訪問(wèn)協(xié)議(Lightweight Directory Access Protocol)的縮寫,其實(shí)是一話號(hào)碼簿,類似于我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網(wǎng)絡(luò)目錄,也類似于你在花園中所看到的樹木。
          LDAP是一種特殊的數(shù)據(jù)庫(kù)。但是LDAP和一般的數(shù)據(jù)庫(kù)不同,明白這一點(diǎn)是很重要的。 LDAP對(duì)查詢進(jìn)行了優(yōu)化,與寫性能相比LDAP的讀性能要優(yōu)秀很多。
          1.1 LDAP的存儲(chǔ)規(guī)則
          區(qū)分名(DN,Distinguished Name)
          和自然界中的樹不同,文件系統(tǒng)/LDAP/電話號(hào)碼簿目錄的每一片枝葉都至少有一個(gè)獨(dú)一無(wú)二的屬性,這一屬性可以幫助我們來(lái)區(qū)別這些枝葉。
          在文件系統(tǒng)中, 這些獨(dú)一無(wú)二的屬性就是帶有完整路徑的文件名。比如/etc/passwd,該文件名在該路徑下是獨(dú)一無(wú)二的。當(dāng)然我們可以有/usr/passwd, /opt/passwd,但是根據(jù)它們的完整路徑,它們?nèi)匀皇俏ㄒ坏摹?
          在LDAP中,一個(gè)條目的區(qū)分名稱叫做“dn”或者叫做區(qū)分名。在一個(gè)目錄中這個(gè)名稱總是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我們可以有諸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。這同上面文件系統(tǒng)中/etc/passwd 和 /usr/passwd的例子很類似。
          我們有獨(dú)一無(wú)二的屬性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。這并不矛盾。
          CN=Common Name 為用戶名或服務(wù)器名,最長(zhǎng)可以到80個(gè)字符,可以為中文;
          OU=Organization Unit為組織單元,最多可以有四級(jí),每級(jí)最長(zhǎng)32個(gè)字符,可以為中文;
          O=Organization 為組織名,可以3—64個(gè)字符長(zhǎng)
          C=Country為國(guó)家名,可選,為2個(gè)字符長(zhǎng)

          LDAP目錄以一系列“屬性對(duì)”的形式來(lái)存儲(chǔ)記錄項(xiàng),每一個(gè)記錄項(xiàng)包括屬性類型和屬性值(這與關(guān)系型數(shù)據(jù)庫(kù)用行和列來(lái)存取數(shù)據(jù)有根本的不同)。
          mail = testmail@mccc.net
          othermailbox = testmailother@mccc.com
          givenname = givenname
          sn = test sn
          屬性可添加,以下一個(gè)屬性必須賦值:
          objectclass=person (值為:person 或 server 或 organization 或 其他自定義的值)

          2 Php如何操作LDAP
          2.1 Php如何與LDAP連接和關(guān)閉
          $ds=ldap_connect("ServerName")
          ServerName是LDAP的服務(wù)器名,

          例:
          $ds=ldap_connect(“10.31.172.30:1000”)
          返回值是:true 或 false

          關(guān)閉連接
          ldap_close($ds);

          2.2 在php中如何搜索用戶信息

          $ds=ldap_connect("10.31.172.30:1000");
          //首先連接上服務(wù)器
          $justthese = array("cn","userpassword",”location”);
          //搜索函數(shù)中的一個(gè)參數(shù),要求返回哪些信息,
          //以上傳回cn,userpassword,location,這些都要求小寫
          $sr=ldap_search($ds,"o=jite", "cn=dom*",$justthese);
          //第一個(gè)參數(shù)開啟LDAP的代號(hào)
          //第二個(gè)參數(shù)最基本的 dn 條件值 , 例:”o=jite,c=cn”
          //第三個(gè)參數(shù) filter 為布林條件,它的語(yǔ)法可以在 Netscape 站上找一份 dirsdkpg.pdf 檔案.
          // ’o’為組織名,’cn’ 為用戶名,用戶名可用通配符 ’*’
          echo "domadmin姓氏有".ldap_count_entries($ds,$sr)." 個(gè)<p>";
          //ldap_count_entries($ds,$sr)傳回記錄總數(shù)

          $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");
          //首先連接上服務(wù)器
          $r=ldap_bind($ds,"cn=domadmin,o=jite","password");
          //系住一個(gè)管理員,有寫的權(quán)限
          // cn=domadmin,o=jite順序不能變
          $info["cn"]="aaa"; //必填
          $info["userpassword"]="aaa";
          $info["location"]="shanghai";
          $info["objectclass"] = "person"; //必填person為個(gè)人,還有server…
          ldap_add($ds, "cn=".$info["cn"].",o=jite", $info);
          ldap_unbind($ds);
          //取消綁定
          ldap_close($ds);
          //關(guān)閉連接
          2.4 刪除用戶
          $ds=ldap_connect("10.31.172.30:1000");
          //首先連接上服務(wù)器
          ldap_bind($ds,"cn=domadmin,o=jite","password");
          //綁定管理員,有刪除的權(quán)限
          $dn="cn=dingxf,o=jite";
          ldap_delete($ds, $dn);
          //刪除用戶
          ldap_unbind($ds);
          //取消綁定
          ldap_close($ds);
          //關(guān)閉連接
          2.5 修改用戶資料
          $ds=ldap_connect("10.31.172.30:1000");
          //首先連接上服務(wù)器
          ldap_bind($ds,"cn=domadmin,o=jite","password");
          //綁定管理員,有修改的權(quán)限
          $dn="cn=dingxf,o=jite";
          //用戶dn
          $info["userpassword"]="aaa"; //要修改的信息,放在數(shù)組變量中
          $info["location"]="shanghaisdaf";

          ldap_modify($ds, $dn , $info);
          //修改函數(shù)
          ldap_unbind($ds);
          //取消綁定
          ldap_close($ds);
          //關(guān)閉連接
          2.6 用戶登錄驗(yàn)證
          $ds=ldap_connect("10.31.172.30:1000");
          //首先連接上服務(wù)器
          if (ldap_bind($ds,"cn=dingxf,o=jite","dingxf")){
          echo "驗(yàn)證通過(guò)";
          }else{
          echo "驗(yàn)證不通過(guò)";
          }
          ldap_unbind($ds);
          //取消綁定
          ldap_close($ds);
          //關(guān)閉連接

          posted on 2007-02-09 10:23 Timothy 閱讀(1040) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          語(yǔ)義Web : 網(wǎng)絡(luò)就是計(jì)算機(jī),軟件就是服務(wù)!

          常用鏈接

          留言簿(4)

          隨筆檔案(20)

          文章分類(25)

          文章檔案(25)

          新聞分類(4)

          新聞檔案(4)

          相冊(cè)

          收藏夾(27)

          個(gè)人主頁(yè)

          網(wǎng)絡(luò)博客

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 轮台县| 兴安县| 来宾市| 双江| 蓬莱市| 定州市| 丰都县| 宁蒗| 沙坪坝区| 镶黄旗| 孝昌县| 南雄市| 美姑县| 永川市| 修武县| 稻城县| 余庆县| 谷城县| 长海县| 和田市| 江门市| 启东市| 澜沧| 遂平县| 怀安县| 镇巴县| 嵊泗县| 武强县| 东源县| 剑河县| 清河县| 监利县| 拉孜县| 法库县| 湘阴县| 祁东县| 五峰| 建瓯市| 项城市| 康保县| 香河县|