快捷搜索:

什么是LDAP

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)." 个

";

//ldap_count_entries($ds,$sr)传回记录总数

$info = ldap_get_entries($ds, $sr);

//LDAP的整个传回资料

echo "资料传回 ".$info["count"]."笔:

";

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

echo "dn为:". $info[$i]["dn"] ."

";

echo "cn为:". $info[$i]["cn"][0] ."

"; //显示用户名

echo "email为:". $info[$i]["mail"][0] ."

"; //显示mail

echo "email为:". $info[$i][“userpassword"][0] ."

"; //显示加密后的密码

}

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”

您可能还会对下面的文章感兴趣: