用Php如何操作LDAP

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 = 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);
//关闭连接

时间: 2024-12-21 22:02:26

用Php如何操作LDAP的相关文章

LDAP是什么?Php如何操作LDAP

Php如何操作LDAP2.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");//首先连接上服务

ldap-关于Java操作Ldap,添加用户/用户组时报错

问题描述 关于Java操作Ldap,添加用户/用户组时报错 public static void addUser() { String parentDN = "CN=Users,DC=jovaunn,DC=com"; String childName = "lj1Group"; String childDN = "CN=" + childName + "," + parentDN; Attribute cn = new Bas

什么是LDAP

LDAP是什么 LDAP是一个用来发布目录信息到许多不同资源的协议.通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大. LDAP最基本的形式是一个连接数据库的标准方式.该数据库为读查询作了优化.因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多.要特别注意的是,LDAP通常作为一个hierarchal数据库使用,而不是一个关系数据库.因此,它的结构用树来表示比用表格好.正因为这样,就不能用SQL语句了. 简单说来,LDAP是一个得到关于人或者资源的集中.静

LDAP服务原理详解(原创)

Directory Services(目录服务) 我们知道,当局域网的规模变的越来越大时,为了方便主机管理,我们使用DHCP来实现IP地址.以太网地址.主机名和拓扑结构等的集中管理和统一分配.同样,如果一个局域网内有许多的其它资源时,如打印机.共享文件夹等等,为了方便的定位及查找它们,一种集中定位管理的方式或许是较好的选择,DNS和NIS都是用来实现类似管理的方法. 对于局域网内的一个用户来讲,工作等其它应用需要,我们必须凭帐号登录主机.用帐号收发E-mail,甚至为了管理需要公司还需要维护一个

到需要了解AD和LDAP的关系的时候了

因为接下来,我要作一个和AD兼容的LDAP服务,用WINDOWS AD或LDAP来管理用户,而邮件服务器专门作收发, 理想的方案,是归档另建服务器. 还好,有ESX,一切都好解决... http://www.cnblogs.com/GreenGrass/archive/2012/08/16/2642303.html LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本 AD是A

phpMyFAQ v2.6.15发布 支持多语言的FAQ系统

phpMyFAQ是一个支持多语言的FAQ系统,类似百度知道,支持多种数据库.phpMyFAQ具有内容管理功能,图片管理,支持多用户,用户组.新闻系统.用户跟踪.语言模块,支持 Microsoft Active Directry 活动目录. phpMyFAQ具体有如下特性: 支持多种数据库:MySQL, PostgreSQL, SQLite, Sybase, MS SQL Server, IBM DB2, IBM Cloudscape, Apache,Derby, Oracle, Interbas

web2ldap 多功能LDAPv3客户端的安装与使用说明

web2ldap 是一款采用Python编写,基于Web的多功能LDAPv3客户端.它可以运行于独立内置http://www.aliyun.com/zixun/aggregation/17117.html">Web服务器或另一个支持FastCGI的(如,mod_fastcgi的Apache)Web服务器的控制.它支持各种LDAPv3的绑定方法和一个强大的内置模式浏览器,支持HTML模板,用于显示和编辑条目,LDIF模板可以快速添加新条目.内置X.509分析器能够显示一个证书的详细视图和CR

ldapfuse 1.0发布 虚拟文件系统

ldapfuse是一个用于FUSE的http://www.aliyun.com/zixun/aggregation/18564.html">虚拟文件系统,允许操作LDAP树. ldapfuse 1.0该版本是着初始的tarball释放.支持LDAP树,包括二进制属性和多值文本属性的MT安全的缓存视图. 关于FUSE LUFS是一个混合用户空间的文件系统框架,它对用于任何应用程序无数的文件系统提供透明支持.大部分LUFS包括一个内核模块和一个用户空间的守护进程.从根本上来说,它将大部分VFS

LDAP操作AD的问题

问题描述 由于客户需要做一个AD域管理平台操作AD(activedirectory),java6.0的API本身是支持通过LDAP协议来操作AD包括:增删除改用户.增删除改组织单元等等.现在客户有一个需求:需要支持新建计算机的功能,并且新建后可以指定特定的用户对该计算机进行加域的权限.通过LDAP新建计算机应该不难,跟新建用户其实类似,但是现在问题是后面那个功能"指定特定的用户对该计算机进行加域"这个要如何实现,百度谷歌了好久都没答案,求大神出现,解救本屌!~~~ps:在实际的serv