日期:2013-09-21  浏览次数:20717 次

引见LDAP
原文:http://ldapman.org/articles/intro_to_ldap.html

原文作者:Michael Donnelly

翻译:Brimmer

如果你在计算机行业任务,那么对LDAP可能早有耳闻了。想深入地了解LDAP吗?那么可以好好地读一下这篇文章。这篇引见性的文章是一系列引见如何在企业中设计、实现和集成LDAP环境的文章的头一篇。次要是先让你熟悉一下LDAP的基本概念,那些比较困难的细节问题将放到当前讨论。在这篇文章中我们将要引见:

什么是LDAP?

什么时候该用LDAP存储数据?

LDAP目录树的结构

单独的LDAP记录

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

LDAP复制

安全和访问控制

如今LDAP技术不只发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运转在几乎所有计算机平台上的所有的使用程序从LDAP目录中获取信息。LDAP目录中可以存储各品种型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连次要的数据源都可以放在任何地方。如果Oracle、Sybase、Informix或Microsoft SQL数据库中曾经存储了类似的数据,那么LDAP和这些数据库到底有什么不同呢?是什么让它更具优势?请继续读下去吧!
什么是LDAP?
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目录)中的信息的协议。更为确切和正式的说法应该是象这样的:“通过使用LDAP,可以在信息目录的正确位置读取(或存储)数据”。但是,也没有必要吹毛求疵,虽然表达得不够精确,我们也都知道对方在说什么。
LDAP目录是数据库吗?
就象Sybase、Oracle、Informix或Microsoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一品种型的数据库,但是不是关系型数据库。不象被设计成每分钟需求处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线买卖处理(OLTP)系统,LDAP次要是优化数据读取的功用。
LDAP目录的优势
如今该说说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对于这样存储这样的信息最为有用,也就是数据需求从不同的地点读取,但是不需求经常更新。例如,这些信息存储在LDAP目录中是十分无效的:

l        公司员工的电话号码簿和组织结构图

l        客户的联系信息

l        计算机管理需求的信息,包括NIS映射、email假名,等等

l        软件包的配置信息

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

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

l        需求在任何平台上都能读取数据吗?

l        每一个单独的记录项是不是每一天都只要很少的改变?

l        可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不范式的,把所有东西都存在一个记录中(差不多只需满足第一范式)。

最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很普通的。例如,一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存在一张张的卡片里,就可以很容易地把它存在LDAP目录里。
LDAP目录树的结构
LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取单个记录,以及回溯到树的顶部。后面会做详细地引见。

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

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

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

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