|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
看看西,人家这个编论坛,那个CMS,还有那啥CRM,我啥时候写一个呢? 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” 多个成员之间重复做相同的工作,很容易因为交流沟通的时候没有进行一致性的文档要求而出现不明错误,严重影响开发进度,导致在预定时间内无法完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。 |
|