LDAP & X.500

LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。 它是基于 X.500 标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持 TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。现在LDAP技术不仅发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应用程序从 LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把 LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。

LDAP目录的优势

如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式,即前端使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess数据库或者是SQL服务器,IIS和数据库之间通过ASP技术使用ODBC进行连接,达到通过填写表单查询数据的功能;

后端在Linux系统的典型实现可能是Linux+ Apache + postgresql,Apache 和数据库之间通过PHP3提供的函数进行连接。使用上述方法的缺点是后端关系数据库的引入导致系统整体的性能降低和系统的管理比较繁琐,因为需要不断的进行数据类型的验证和事务的完整性的确认;并且前端用户对数据的控制不够灵活,用户权限的设置一般只能是设置在表一级而不是设置在记录一级。

目录服务的推出主要是解决上述数据库中存在的问题。目录与关系数据库相似,是指具有描述性的基于属性的记录集合,但它的数据类型主要是字符型,为了检索的需要添加了BIN (二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax),而不是关系数据库提供的整数、浮点数、日期、货币等类型,同样也不提供象关系数据库中普遍包含的大量的函数, 它主要面向数据的查询服务(查询和修改操作比一般是大于10:1),不提供事务的回滚(rollback)机制,它的数据修改使用简单的锁定机制实现All-or-Nothing,它的目标是快速响应和大容量查询并且提供多目录服务器的信息复制功能。

现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。 可能LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。

LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP得到了业界的广泛认可,因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,因为他们根本不用考虑另一端(客户端或服务端)是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器(或者还可能是具有LDAP界面的关系型数据库),因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是,如果软件产商想在软件产品中集成对DBMS的支持,那么通常都要对每一个数据库服务器单独定制。不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费 大多数的LDAP服务器安装起来很简单,也容易维护和优化。

LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库产商就会要你支付额外的费用,而且也很难管理。

LDAP允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权限。例如,设备管理员可以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客户端的应用程序上是否要进行安全检查。

LDAP(Lightweight Directory Acess Protocol)是目录服务在TCP/IP上的实现(RFC 1777 V2版和RFC 2251 V3版)。它是对X500的目录协议的移植,但是简化了实现方法,所以称为轻量级的目录服务。
在LDAP中目录是按照树型结构组织,目录由条目(Entry)组成,条目相当于关系数据库中表的记录;
条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,DN相当于关系数据库表中的关键字(Primary Key);
属性由类型(Type)和多个值(Values)组成,相当于关系数据库中的域(Field)由域名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。
LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。LDAP协议集还规定了DN的命名方法、存取控制方法、搜索格式、复制方法、URL格式、开发接口等

LDAP对于这样存储这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。

例如,这些信息存储在LDAP目录中是十分有效的:

公司员工的电话号码簿和组织结构图
客户的联系信息
计算机管理需要的信息,包括NIS映射、email假名,等等
软件包的配置信息
公用证书和安全密匙

什么时候该用LDAP存储数据

大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此, 当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。

如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。

需要在任何平台上都能读取数据吗?
每一个单独的记录项是不是每一天都只有很少的改变?
可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。
最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。
一个简单的判断方法:如果可以把保数据存在一张张的卡片里,就可以很容易地把它存在LDAP目录里。

安全和访问控制

LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的安全可安全多了。

用LDAP的ACI,可以完成:

给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名,等等)只有“只读”权限。

给予“HR-admins"组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。

禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。

给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。

给予“host-admins"组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息

通过Web,允许“foobar-sales"组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP,这将非常有用)

通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名(mail aliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。“公用”的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址以192.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须为*.foobar.com。

LDAP目录树的结构

LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取单个记录,以及回溯到树的顶部。后面会做详细地介绍。

为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况:

如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想把公司的资产管理信息“推”到那里。

你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对“asset-mgmt"部分有完全的访问权限,但是不能访问其它地方。

把LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。

刨根问底:基准DN

LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作,这家公司在Internet上的名字是foobar.com。

o="FooBar, Inc.", c=US
(以X.500格式表示的基准DN)

在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着 Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。

o=foobar.com

(用公司的Internet地址表示的基准DN)

这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。

dc=foobar, dc=com
(用DNS域名的不同部分组成的基准DN)

就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式把域名: foobar.com分成两部分 dc=foobar, dc=com。在理论上,这种格式可能会更灵活一点,但是对于最终用户来说也更难记忆一点。考虑一下foobar.com这个例子。当 foobar.com和gizmo.com合并之后,可以简单的把“dc=com"当作基准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果foobar.com和wocket.edu合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动目录(Actrive Directory),Microsoft已经限制你必须使用这种格式。

更上一层楼:在目录树中怎么组织数据

在UNIX文件系统中,最顶层是根目录(root)。在根目录的下面有很多的文件和目录。象上面介绍的那样,LDAP目录也是用同样的方法组织起来的。

在根目录下,要把数据从逻辑上区分开。因为历史上(X.500)的原因,大多数LDAP目录用OU从逻辑上把数据分开来。OU表示 “Organization Unit",在X.500协议中是用来表示公司内部的机构:销售部、财务部,等等。现在LDAP还保留ou=这样的命名规则,但是扩展了分类的范围,可以分类为:ou=people, ou=groups, ou=devices,等等。更低一级的OU有时用来做更细的归类。例如:LDAP目录树(不包括单独的记录)可能会是这样的:

dc=foobar, dc=com
ou=customers
ou=asia
ou=europe
ou=usa
ou=employees
ou=rooms
ou=groups
ou=assets-mgmt
ou=nisgroups
ou=recipes

单独的LDAP记录

DN是LDAP记录项的名字

在LDAP目录中的所有记录项都有一个唯一的“Distinguished Name",也就是DN。每一个LDAP记录项的DN是由两个部分组成的:相对DN(RDN)和记录在LDAP目录中的位置。

RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cn(Common Name)这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录,我就会用cn=Oatmeal Deluxe作为记录项的RDN。

我的LDAP目录的基准DN是dc=foobar,dc=com
我把自己的食谱作为LDAP的记录项存在ou=recipes
我的LDAP记录项的RDN设为cn=Oatmeal Deluxe

上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNS主机名类似。下面就是完整的DN:

cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com

举一个实际的例子来说明DN:

现在为公司的员工设置一个DN。可以用基于cn或uid(User ID),作为典型的用户帐号。例如,FooBar的员工Fran Smith(登录名:fsmith)的DN可以为下面两种格式:

uid=fsmith,ou=employees,dc=foobar,dc=com
(基于登录名)

LDAP(以及X.500)用uid表示“User ID",不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名,因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司,如果Fran改变了她的名字(结婚?离婚?或宗教原因?),也用不着改变LDAP记录项的DN。

cn=Fran Smith,ou=employees,dc=foobar,dc=com
(基于姓名)

可以看到这种格式使用了Common Name(CN)。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是:如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该尽可能地避免改变一个记录项的DN。

定制目录的对象类型

你可以用LDAP存储各种类型的数据对象,只要这些对象可以用属性来表示,下面这些是可以在LDAP中存储的一些信息:

员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。

物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。

客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。

会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。

食谱信息:菜的名字、配料、烹调方法以及准备方法。

因为LDAP目录可以定制成存储任何文本或二进制数据,到底存什么要由你自己决定。LDAP目录用对象类型(object classes)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中,你都要根据自己的需要扩展基本的LDAP目录的功能,创建新的对象类型或者扩展现存的对象类型。

LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。下面是我存在LDAP目录中的一部分食谱记录:

dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com
cn: Instant Oatmeal Deluxe
recipeCuisine: breakfast
recipeIngredient: 1 packet instant oatmeal
recipeIngredient: 1 cup water
recipeIngredient: 1 pinch salt
recipeIngredient: 1 tsp brown sugar
recipeIngredient: 1/4 apple, any type

请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的,而不是在每一个属性的后面用逗号把一系列值分开。

因为用这样的方式存储数据,所以数据库就有很大的灵活性,不必为加入一些新的数据就重新创建表和索引。更重要的是,LDAP目录不必花费内存或硬盘空间处理“空”域,也就是说,实际上不使用可选择的域也不会花费你任何资源。

作为例子的一个单独的数据项

让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIF,用来导入和导出LDAP目录的记录项。

dn: uid=fsmith, ou=employees, dc=foobar, dc=com
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: foobarPerson
uid: fsmith
givenname: Fran
sn: Smith
cn: Fran Smith
cn: Frances Smith
telephonenumber: 510-555-1234
roomnumber: 122G
o: Foobar, Inc.
mailRoutingAddress: [email protected]mailhost: mail.foobar.com
userpassword: 3x1231v76T89N
uidnumber: 1234
gidnumber: 1200
homedirectory: /home/fsmith
loginshell: /usr/local/bin/bash

属性的值在保存的时候是保留大小写的,但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性(例如,password)在搜索的时候需要区分大小写。

让我们一点一点地分析上面的记录项。

dn: uid=fsmith, ou=employees, dc=foobar, dc=com

这是Fran的LDAP记录项的完整DN,包括在目录树中的完整路径。LDAP(和X.500)使用uid(User ID),不要把它和UNIX的uid号混淆了。

objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: foobarPerson

可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cn(common name)和sn(surname)这两个域不能为空。persion对象类型允许有其它的可选域,包括givenname、 telephonenumber,等等。organizational Person给person加入更多的可选域,inetOrgPerson又加入更多的可选域(包括电子邮件信息)。最后,foobarPerson是为 Foobar定制的对象类型,加入了很多定制的属性。

uid: fsmith
givenname: Fran
sn: Smith
cn: Fran Smith
cn: Frances Smith
telephonenumber: 510-555-1234
roomnumber: 122G
o: Foobar, Inc.

以前说过了,uid表示User ID。当看到uid的时候,就在脑袋里想一想“login"。

请注意CN有多个值。就象上面介绍的,LDAP允许某些属性有多个值。为什么允许有多个值呢?假定你在用公司的LDAP服务器查找Fran 的电话号码。你可能只知道她的名字叫Fran,但是对人力资源处的人来说她的正式名字叫做Frances。因为保存了她的两个名字,所以用任何一个名字检索都可以找到Fran的电话号码、电子邮件和办公房间号,等等。

mailRoutingAddress: [email protected]mailhost: mail.foobar.com

就象现在大多数的公司都上网了,Foobar用Sendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。

Userpassword: 3x1231v76T89N
uidnumber: 1234
gidnumber: 1200
gecos: Frances Smith
homedirectory: /home/fsmith
loginshell: /usr/local/bin/bash

注意,Foobar的系统管理员把所有用户的口令映射信息也都存在LDAP中。FoobarPerson类型的对象具有这种能力。再注意一下,用户口令是用UNIX的口令加密格式存储的。UNIX的uid在这里为uidnumber。提醒你一下,关于如何在LDAP中保存NIS信息,有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成。

LDAP复制

LDAP服务器可以使用基于“推”或者“拉”的技术,用简单或基于安全证书的安全验证,复制一部分或者所有的数据。

例如,Foobar有一个“公用的”LDAP服务器,地址为ldap.foobar.com,端口为389。Netscape Communicator的电子邮件查询功能、UNIX的“ph"命令要用到这个服务器,用户也可以在任何地方查询这个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计算机上,不过端口号是1389。

你可能即不想让员工查询资产管理或食谱的信息,又不想让信息技术人员看到整个公司的LDAP目录。为了解决这个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上,不复制需要隐藏的信息。为了保持数据始终是最新的,主目录服务器被设置成即时“推”同步。这些种方法主要是为了方便,而不是安全,因为如果有权限的用户想查询所有的数据,可以用另一个LDAP端口。

假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从ldap.foobar.com:1389到munich-ldap.foobar.com:389的数据复制,象下面这样:

periodic pull: ou=asia,ou=customers,o=sendmail.com
periodic pull: ou=us,ou=customers,o=sendmail.com
immediate push: ou=europe,ou=customers,o=sendmail.com

“拉”连接每15分钟同步一次,在上面假定的情况下足够了。“推”连接保证任何欧洲的联系信息发生了变化就立即被“推”到Munich。

用上面的复制模式,用户为了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地连接到本地服务器。如果他们改变了数据,本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后,主LDAP服务器把这些变化“推”回本地的“公用”LDAP服务器保持数据的同步。这对本地的用户有很大的好处,因为所有的查询(大多数是读)都在本地的服务器上进行,速度非常快。当需要改变信息的时候,最终用户不需要重新配置客户端的软件,因为LDAP目录服务器为他们完成了所有的数据交换工作。

====================================================
http://www.qqread.com/php/u542431101.html
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 = [email protected]
othermailbox = [email protected]
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”

====================================================

http://www.zzole.com/Article/os/328/924/2006/2006101530332.html
Linux下的LDAP
作者:佚名  来源:不详  发布时间:2005-12-24 21:07:11

 

作者简介:
Atif Ghaffar 就像只变色龙。他经常变换角色,从系统管理员到程序员,再到教师、项目管理员,直至任何可以完成工作的角色。有时候,当他在电影院看电影的同时,他也喜欢拿出笔记本电脑编写程序。Atif始终坚信,他是属于linux和开放 源码社团的。关于Atif的更多信息,可以访问他的主页 http://www.developer.ch/~aghaffar

摘要:
本文将讨论LDAP以及在我们所喜爱的操作系统——linux上实现LDAP。
已经有很多关于LDAP的文献,所以我不想在这里再重复什么,我不准备讨论高级的LDAP概念、计划以及第二版和第三版LDAP的区别等等。事实上,我对这类问题也所知不多。相反地,我将尝试用简单明了的语言解释什么是LDAP, 它能给我们带来的好处以及我们如何使用它。
我不是一个LDAP专家。我只是一个LDAP的初学者。本文介绍的是我用LDAP做了些什么以及如何做。我不会使你再像以前的我一样感到迷惑。
问题:既然你是个LDAP初学者,为什么还要写一篇关于LDAP的文章?
最近我在一个项目上需要一位同事的帮助。 这个项目的基础就是LDAP。 我的同事可以在perl、邮件服务器等等方面帮助我,但是他对LDAP一无所知,事实是每一次他想要深入学习LDAP, 反而会对LDAP越来越迷惑。 因为该项目的基础是LDAP, 所以我给了这位同事半小时来学习LDAP,结果是一切反而变得清晰明了了。 原因很简单, LDAP是在前端的, 只需要集中一点点注意力或者一些生动的例子就可以了。
在本文中我也正想这样做。
你可以在文中发现好多对学习LDAP有用的url。

LDAP是什么?
LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,其实是一种目录服务,类似于我们在文件系统中所使用的目录,类似于我们查询电话号码使用的电话号码簿,类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录,也类似于你在花园中所看到的树木。
LDAP是一种特殊的数据库。但是LDAP和一般的数据库不同,明白这一点是很重要的。 LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。

一般地,目录服务提供什么样的服务呢?
通常是根据查询的标准返回一定的信息。

实例
文件系统目录
ls /etc
返回/etc目录下所有的文件和子目录。

ls /etc/p*
返回/etc下所有以p开头的文件和子目录。

find /usr/local/apache -name index.html
这将在"/usr/local/apache"目录下搜索名为index.html的文件/子目录。

NIS目录
ypcat passwd
这将从NIS数据库返回用户名、密码、用户id等信息。

ypmatch atif passwd
返回用户atif的密码。

DNS目录
nslookup www.linuxfocus.org
返回www.linuxfocus.org的ip地址。

nslookup -type MX linuxfocus.org
返回主机名符合linuxfocus.org的MX记录信息。

LDAP目录
(我们将在下面详细阐述)
ldapsearch uid=aghaffar
返回关于用户aghaffar的所有公开信息。
这和find / -uid aghaffar unix命令很类似。

ldapsearch uid=aghaffar mail
返回用户ughaffar的邮件信息

目录基础或根
在上面我们所提到的任何一种目录服务中都有一个我们开始浏览或搜索的开始点。 这个开始点就是通常所谓的根。 这和一棵数的根也很类似。每棵都有一个根,以及很多的树枝树叶。
* 文件系统的根是 /
* NIS 的根是域名,比如 "linuxfocus.org"
* DNS 根是Internic(译者注:Internet网络信息中心, Internet的管理组织)
* LDAP同样有一个可定义的根,比如 "o=linuxfocus.org" ,这里o表示组织
每个根都可以衍生出好多枝叶(正如同你邻居的花园中的树木一样), 对于文件系统来说,它的枝叶就是一个个文件及子目录。每一个枝叶都有一些属性。比如文件系统的枝叶(文件及子目录)有以下的属性:
* 名称
* 修改时间
* 所有者
* 组(译者注:所有者所在的组)
* 等等
下图显示了一个文件系统目录。
属性由unix命令ls -ld /usr得到。


下面是一个LDAP目录的图示:

我们将在下面讨论这张图。

区分名(DN,Distinguished Name)
和自然界中的树不同,文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性,这一属性可以帮助我们来区别这些枝叶。
在文件系统中, 这些独一无二的属性就是带有完整路径的文件名。比如/etc/passwd,该文件名在该路径下是独一无二的。当然我们可以有/usr/passwd, /opt/passwd,但是根据它们的完整路径,它们仍然是唯一的。
类似于DNS系统的FQDN正式域名,FQDN也是唯一的。
在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。这并不矛盾。

LDAP服务器
现在市场上有很多LDAP服务器,大多数都可以在linux上运行。本文将介绍openLDAP的使用。
我为什么选择openLDAP? 为什么你应该选择openLDAP?
* openLDAP是开放 源码
openLDAP的官方网站是 http://www.openldap.org。你可以下载其源代码包自己编译,或者看看你的linux发行版是否已经包含了该软件包。如果已经包含了就可以安装预先编译好的版本从而少花费些力气。
我已经成功地在SuSE6.x 和 RedHat6.x上测试过openLDAP。
构建LDAP目录
下面我们将介绍设置一个LDAP服务器的步骤。
步骤:
* 下载并安装openLDAP
* 配置 LDAP server
* 配置本地环境指向LDAP 安装
* 初始化LDAP 数据库
* 查询 LDAP
* 添加/修改 LDAP 条目
下载并安装openLDAP
正如前面所提到的,可以从www.openldap.com下载源代码包并根据它的相关文档进行安装,或者安装预先编译好的包(包的安装或如何编译应用程序已经超出了本文讨论的范畴)。
配置LDAP服务器
在我们的例子中,我将为linuxfocus.org构建LDAP服务器。你可以用你喜欢的编辑器编辑slapd.conf和ldap.comf配置文件来更改名称等参数以适应你的具体需求。
在我的服务器上配置文件在/etc/openldap目录下,你的配置文件可能在/usr/local/etc/openldap或者别的地方,这要根据你的linux发行版本或者编译openldap的具体情况而定。
######### /etc/openldap/slapd.conf ###################################
# 下面的部分是我的suse 6.4 linux 发行版本预先定义的
# 我们设置的部分在本文的第二和第三部分
include /etc/openldap/slapd.at.conf
include /etc/openldap/slapd.oc.conf
schemacheck off

pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args

#######################################################################
# ldbm database definitions
#######################################################################

# 定义使用的数据库类型。 缺省是ldbm
database ldbm

# 后缀或者根. 这是你LDAP目录的顶节点
suffix "o=linuxfocus.org"

# LDAP的dbs 保存的位置
directory /var/lib/ldap

# 目录管理员的区分名
rootdn "cn=Manager, o=linuxfocus.org"

# 保存ldap目录管理员的明文密码是很糟糕的,但是我们将在刚刚开始使用ldap时这样做
rootpw secret

# 这就是所有的一切

编辑你的 /etc/openldap/ldap.conf配置文件
该文件位于ldap客户端(我们将使用同一计算机作为服务器和客户端,当然这可以在同一计算机或不同的计算机上)
通常诸如ldapdelete 、ldapadd等等的ldap客户端会读该文件的内容。

##########/etc/openldap/ldap.conf#########
# LDAP 的缺省设置
#
# 查看 ldap.conf(5) 可以获取更多的信息
# 本文件应该设置为对所有人可读

# 定义ldap服务器,可以用主机名或ip地址
host 127.0.0.1

# 定义我们要查询的目录的根
# 我们将要使用的顶节点,这不一定是目录的根,比如我们可以使用
# base = ou=users, o=linuxfocus.ch
# 这时我们的一切查询都将从树根o=linuxfocus.org的分支开始

现在启动ldap服务器。
如果你使用SuSE预先编译好的openldap服务器,你可以通过下面的命令启动ldap服务
/etc/rc.d/ldap start
在RedHat,该命令为
/etc/rc.d/init.d/ldap start
如果你是使用缺省设置自己编译并安装的,你可以用/usr/local/libexec/slapd &启动ldap服务器。如果没有使用缺省设置,请找到slapd文件并运行它。

在新安装的LDAP服务器上添加数据
到现在为止,你的ldap服务器已经运行起来了,可以准备添加数据了。最标准的往ldap服务器中添加数据的方法是建立一个LDIF(LDAP目录交换格式)文件。你可以通过阅读man ldif来获得更多关于ldif的信息。
简单说来,ldif是ldap条目的文本表示。这些条目是很好读懂的,并且可以在来自两个不同的厂家的LDAP服务器间交换数据,哪怕使用的是不同的数据库后台或者是运行在不同的操作系统上。
是的,还有其他方法。我对为什么不使用XML替代LDIF感到很惊讶。
就让我们一起来建立ldif文件,而不要感到任何的忙乱。一些应该记住的要点:
? ldif 文件中的每一记录/条目都应用一个空行分开
? 空格是很重要的,"Atif Ghaffar" 和"Atif Ghaffar " 是完全不同的
下面是一个ldif文件linuxfocus.org.ldif

dn: o=linuxfocus.org
o: linuxfocus.org
objectclass: top
objectclass: organization

dn: ou=editors, o=linuxfocus.org
ou: editors
objectclass: organizationalUnit

dn: uid=aghaffar, ou=editors, o=linuxfocus.org
uid: aghafar
cn: Atif Ghaffar
sn: Ghaffar
givenname: Atif
objectclass: person
userpassword: yIvSBWSuLs2N2
mailacceptinggeneralid: [email protected]
ou: editors

dn: uid=mkempe, ou=editors, o=linuxfocus.org
uid: mkempe
cn: Magnus Kempe
sn: Kempe
givenname: Magnus
objectclass: person
userpassword: clearpass
mailacceptinggeneralid: [email protected]
maildrop: [email protected]
preferredlanguage: fr
ou: editors

下面我们将这些数据加入ldap目录。我们使用命令行程序ldapadd
ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif
该命令使用“cn=Manager, o=linuxfocus.org”作为管理员的区分名(dn),使用secret
作为密码,然后从linuxfocus.org.ldif文件中读取数据并写入ldap目录。
如果一切正常的话你可以准备开始查询你的ldap目录了,否则如果其间出了差错的话,
你或许可以准备往我的邮箱灌水了;)
为我的邮件服务器考虑,我希望一切正常。
在继续之前,让我们一行一行的来检查一下这个ldif文件。
1. 这一行定义顶级记录的区分名(dn),这将是目录树的根,这是必须定义的。
2. 这一行我们定义组织(o),并赋值为“linuxfocus.org”。
3. 这一行定义这个对象的对象类,我们定义为top。
4. 定义对象的类型(这里是组织对象)。
5. 空行为分割符。
6. 定义组editors(这是linuxfocus editors分支),举一反三,我们也可以根据不同的目的来定义其他的分支,比如hosts和data分支。
7. 明确定义组织单元(ou)editors的属性。属性是可以被用来查询的条目,比如,如果你想要查询所有属于editors的用户,你可以这样查询“show all dn where ou=editors”。如果我们没有定义属性,则这条记录将不符合查询条件。
8. 定义对象类(组织单元)。
9. 空行为分割符。
10. 定义属于组editors的用户aghaffar的区分名。
11. 定义该用户的uid(要保证其是唯一的)。
12. 定义该用户的cn(普通名字),比如,我喜欢将我的名字写成“Firstname Lastname”,而有的人可能喜欢“Lastname Firstname”.
13. 姓
14. 名
15. 对象类(人)
16. 用户密码(这里是加密的密码)。这串字符表示密码是用加密算法加密过的。剩下的部分是用“yI”加密的密码"yIvSBWSuLs2N"。
17. 定义我的邮件地址。
18. 定义我所属于的组织单元(组editors)
19. 空行为分割符。
20. 定义另一个用户mkempe
21. 普通名字
22. 姓
23. 名
24. 对象类
25. 用户密码:注意这里我们使用明文密码。你可以为不同的用户使用不同的方案。这是根据每一条目定义的,而不是基于数据库定义的。因此一个用户可能使用明文密码,第二个可能使用加密密码,另一个则可能使用SHA认证方式。
26. 邮件地址。
27. maildrop:定义用户邮箱的真实位置。在这个例子中,这个服务器接受收件人为[email protected]的邮件,然后邮件服务器会查询ldap服务器“有接受收件人为[email protected]的邮箱吗?”ldap服务器就会返回maildrop属性值。接着邮件服务器就会将该邮件发给那个邮箱。
28. 母语:这是我们一个额外的属性,这个属性定义了用户的母语。我们可以利用存储在中央ldap服务器的信息来为改用户提供更好的服务。比如,直接向该用户显示本页的法语版本。请注意前面一条记录没有母语、maildrop等属性,这也是ldap强大的一个方面——不必象一个数据库中的表格那样拥有固定的结构。你可以在一条记录中定义3条属性,而在另一个中定义30条属性。
29. 组织单元。

查询ldap数据库
让我们找出关于用户mkempe的所有数据
ldapsearch uid=mkempe
找出editors的所有区分名
ldapsearch (&(objectclass=person)(ou=editors)) dn
更多的例子可以参考ldapsearch的man手册。

LDAP的好处
让我们来看一看迁移到LDAP所带来的好处。
LDAP是一个开放的标准。你将使用的大多数的新的应用程序都能够查询ldap数据库,甚至windows2000使用LDAP作为他的目录服务。信息的集中化将会带来巨大的利益,单点管理,减少错误,减少数据复制等等。
LDAP应用实例
如果我是康柏公司的推销员,我可以测试向你销售LDAP并告诉你可以用它来作为“联系人管理”,但是我不受雇于康柏公司,所以我会尝试向你介绍LDAP有趣的一些方面。
同一登录系统的单一数据源
用户帐号放置在一个集中的地方。
你可能会使用一个LDAP目录来管理你的用户,放置用户的密码及其他信息,而不仅仅是存放在/et/passwd文件中。Windows/Unix/Mac用户都可以使用这些信息。
建议:你可以使用LDAP信息来进行用户认证,而不是用shadow或nis等等方式。
建议:你可以写一个小web程序来让用户不用登录到系统就可以更改他的存放在LDAP中的unix密码。这时你将需要使用pam_ldap, 可以参考资源列表中关于pam_ldap的url.
注意:
统一登录系统的单一数据源!=同一登录系统

大多数LDAP销售商在向你销售LDAP时,会告诉你如果你使用LDAP,你就可以拥有一个同一登录系统解决方案。其实这只说对了一半。同一登录系统并不是什么新玩艺,只不过时IT经理的噱头而已。
同一登录系统的实例:
* 你用"aghaffar"登录工作站
* 你访问公司的内部网,内部网中的web页面是密码保护的,你不用登录就可以访问,因为www服务器可以识别你的身份。
* 你开始运行一个程序,比如SAP, 再一次地,你不需要密码,因为系统已经拥有了你的身份和信息。
* 等等等等
当然你可以使用LDAP作为用户数据源,而在几个不同的应用程序间进行会话管理的小戏法就是所谓的“统一登录系统”了,要知道,这和LDAP是风马牛不相及的。
其实这可以用LDAP, NIS, NT域控制器帐号,数据库,平面文件实现的。
建议:你可能想要建立用户邮件帐号但是不想建立unxi帐号。没问题,我正在使用一个LDAP+Postfix 邮件服务器+ Cyrus IMAP/POP服务器的复合服务器来管理成千上万的用户,当然不用建立相应的系统帐号。
建议:你可能想要将不同应用程序的信息集中化。比如,将Netscape的首选项、书签等信息存入LDAP,并且用户可以将这些信息从一部计算机移动到另一部,从LDAP服务器下载他/她的信息。这个用户可以从Windows NT Netscape 迁移到Linux/Solaris/Macintosh Netscape的同时还使用同样的用户信息(对不起,又提到了Microsoft,我知道这倒了你的胃口)。

情景:我憎恶老是在web和书面上填充我的个人信息。我不知道为什么人们老是想知道我的年龄、生日、办公室地址,即使已经告诉过他们。在我以前谋职的公司里,我们不得不建立庞大的表格,表格的信息75%都是一样的(姓名、主题、通信地址、楼层、管理员名字、部门)。
建议:比如,如果我的电话出故障了,我给你的唯一信息是“我的电话出故障了”。
采取以下的措施可以尽量减少用户的厌烦:
? 为用户提供问题提交表单
? 页面提供用户名/密码验证 (每个对话验证一次,下一次用户登录是能记住用户信息)
? 页面提供两个表单元素 1) 反映问题的文字框2)提交按钮
写文章:教/学
我希望这篇文章能对你有所帮助,或者让你的大脑充满了10001100110010。你看看,你并不是必须成为专家才能和大家共享你的知识。你不必成为一个教授,也不必成为一个教师才能写教程。每一点小小的知识都能帮助别人。
幸运的是,现在我看到越来越多的人在讨论linux, 我看到他们中的大多数人都在测试linux,在一些人进行了一段时间的同时一些人很快放弃了。这些人可能完全没有unix命令的使用经验和概念,然而他们却可能和遇到的问题斗争了一段时间。如果你精神饱满的面对遇到的问题,那么你可以成为最好的教师,如果你认为你没有任何的资料写文章来帮助linux社团,你可以自愿的将本文翻译成你的母语。

资源列表:
PAM LDAP Module
pam_ldap 模块为Solarish和linux工作站提供LDAP目录认证,以及更改其在目录中的密码。
openLDAP
OpenLDAP 项目是一个协作开发强健的、商业等级的、具有丰富特性的、并且是开放 源码的LDAP应用程序和工具的项目。该项目由一个全世界志愿者组成的社团管理,该社团利用Internet来交流、计划和开发OpenLDAP 软件和文档。
Java based excellent LDAP Browser/Editor
LDAP 浏览器/编辑器提供用户友好界面LDAP目录编辑工具。由JFC (SwingSet) 和JNDI 类库写成。可以连接第二和第三版LDAP 服务器。
kldap
kldap 是一个KDE的LDAP客户端(浏览器) 。你可以象你熟悉的Novell Administrator那样浏览LDAP目录。
http://freshmeat.net/search.php3?query=ldap
Freshmeat 站点上大量的LDAP相关工具。
http://www.redbooks.ibm.com/abstracts/sg245110.html
IBM的LDAP实现手册。你可以在线浏览或购买。
ypldapd - nis 2 ldap gateway
Ypldapd 是一个网络信息服务(NIS) 服务器,它使用LDAP作为数据源。通过ypldapd,现存的NIS 客户可以透明地使用LDAP来查询用户、组和主机信息。企业可以充分地获得LDAP所带来的好处,比如扩展性等而不用升级客户端。
Introduction to the SLAPD and SLURPD Administrators Guide
必读的关于LDAP的教程。
An LDAP RaodMap & FAQ
一个关于LDAP和X.500目录服务的资源教程。
http://www.umich.edu/~dirsvcs/ldap/index.html
轻量目录访问协议。


====================================================

http://blog.csdn.net/Minideas/archive/2007/01/25/1493377.aspx

X.500
      
在介绍X.500之前,先简单介绍一些X.400的情况。 X.400是在Email已经被Internet推广了几年之后,由于CCITT(即国际电话委员会)也决定介入电子邮递业务。CCITT发明了X.400这样一个全新的充满活力的新生事物。它有益于国际电迅建立威严。虽然X.400也确实处理了一些Internet邮递的工作。 但是X.400太复杂了,以致于它从出版发行第一版本到公用化花了将近十年的时间。 X.400通常使用的属性和代码如下:

  Surname(S):收件人的姓名
  Given name(G): 收件人的名
  Initials(I): 第一个或中间名的首字母
  Generational qualifier(GQ或Q):家族名
  Administration Domain Name(ADMD或A):行政辖区名
  Privati Domain Name(PRMDh或P):本机区域名
  Organization(O):组织机构名-指收件人所属的机构,它可以与AMDM或PRMD有关。
  Country(C):两个字母的国家码
  Domain Defined Attribute(DD或DDA):辨认收件人的密码,如用户名、 帐号,你可以把这些属性编码为地址, 用"/"加以分隔或把每个属性写成码、等号和数值。

  由于X.400并不普及,所以CCITT又推出了X.500。

  X.500是一个将局部名录服务连接起来,构成全球分布式的名录服务系统的协议 。X.500组织起来的数据就象一个很全的电话号码簿,或者说一个X.500系统象是一个分门别类的图书馆。而某一机构建立和维护的名录数据库只是全球名录数据 库的一部分。

  X.500基本上是用来查询有关人员的信息(如邮政地址、电话号码、电子邮件地 址等)的一种服务。可以检索的字段有:姓名、人员所在机构名、所在机构的部 门名称以及国家名称。

  在X.500协议中,本地的X.500客户程序又叫名录用户代理(DUA)。得到X.500 客户程序最简便的方法是通过FTP从公共软件库中获得,所获得的X.500客户程序一 般都基于三种方式:基于命令行的用户界面;基于菜单驱动的用户界面;基于X-Windows系统的用户界面。

  其中命令行用户界面的注册名为:de、dish、fred;

  菜单驱动用户界面的注册名为:sd(以前为:widget);

  X-Windows系统用户界面的注册名为:xdi、xlookup(xlu)、pool。

  这些名录用户代理程序所提供的功能也不一样,有的只提供基本查询功能,有 的则支持全部X.500的功能。如果用户对X.500不熟悉,

  我们建议你使用基于命令行的名录用户代理程序,例如de程序。 de程序的用户界面简单,它就是一个面向客户提供X.500服务的程序,并且它适 用于各种类型的计算机终端。de程序支持基本的X.500功能。 当de程序启动后,要求用户输入由4个数据项组成的一个检索请求,这四个数据项依次是: 

人名: 

  可以使用通配符"*"。将检索所有匹配的人名。如果没有此项将只检 索部门或机构。 

部门名称:

  即某人所在机构的具体部门的名称或名称缩写。也可以使用通配 符"*"。如果没有此项将检索所有部门。 

机构名称: 

  即某人所在的机构名称或名称缩写。也可以使用通配符"*"。 国家名称:即某人所在的国家的名称。使用通配符"*"将命中所有国家。

  X.500的服务大部分是交互作用的,在你查询时它会给你一些联机帮助,来帮助你使用它。

  由于X.500比X.400更加实用,所以X.500将成为今后的全球检索数据库的流行趋势。 

  X.500 Directory Service 

  X.500目录服务

  X.500目录服务是一种用于开发一个单位(或组织)内部人员目录的标准方法,这个目录可以成为全球目录的一部分,这样在世界任何一个角落,只要能和Internet相连的地方,任何人都可以查询这个单位中人员的信息,可以通过人名,部门,单位(或组织)来进行查询,许多公司或组织都提供X.500目录,这个目录象我们通常知道的目录一样有一个树型结构,它的结构如下:国家,单位(或组织),部门和个人。有两个知名的X.500目录,也是最大的X.500目录,它们是用于管理域名注册的InterNIC和存储全美国家实验室的Esnet。

  在X.500中每个本地目录叫做目录系统代理(DSA),一个DSA代表一个或多个单位(或组织),而DSA之间以目录信息树(DIT)连接。用于访问一个或多个DSA的用户程序称为DUA,它包括whois,finger和其它用于提供图形用户界面的程序。X.500在全球目录服务(GDS)中作为分布计算机环境的一部分实现。一些大学也以轻载目录访问协议(LDAP)为基础使用X.500作为电子邮件服务和姓名查询的方法。

  X.500目录服务器用于发布用户的证书和黑名单信息,用户可通过LDAP协议查询自己或其他人的证书和下载黑名单信息。LDAP是X.500目录访问协议的一个子集。支持这个协议的服务器,可以让普通用户使用支持LDAP功能的Web浏览器,进行有关电子邮件用户登录住处方面的查询,查询的用户属性包括姓名、电话号码、电子邮件地址、工作机构、所在部门和地址信息等。系统管理员可以通过LDAP客户程序远程进行目录管理操作,如添加、删除和修改用户账户信息等。 

你可能感兴趣的:(LDAP)