LDAP协议
目录是一组具有类似属性、以一定逻辑和层次组合的信息。常见的例子是通讯簿,由以字母顺序排列的名字、地址和电话号码组成。
目录服务是一种在分布式环境中发现目标的方法。目录具有两个主要组成部分:
- 第一部分是数据库,数据库是分布式的,且拥有一个描述数据的规划。
- 第二部分则是访问和处理数据的各种协议。
目录服务其实也是一种数据库系统,只是这种数据库是一种树形结构,而不是通常使用的关系数据库。目录服务与关系数据库之间的主要区别在于:二者都允许对存储数据进行访问,只是目录主要用于读取,其查询的效率很高,而关系数据库则是为读写而设计的。
提示:目录服务不适于进行频繁的更新,属于典型的分布式结构。
LDAP是一个目录服务协议,目前存在众多版本的LDAP,而最常见的则是V2和V3两个版本,它们分别于1995年和1997年首次发布。
LDAP的基本模型
LDAP的基本模型是建立在“条目”(Entry)的基础上。一个条目是一个或多个属性的集合,并且具有一个全局唯一的“可区分名称”(用dn表示)。与关系型数据(后面简称数据库)进行类比,一个条目相当于数据库中的一条记录,而dn相当于数据库中记录的关键字,属性相当于数据库中的字段。
提示:dn必须是全局唯一的。
LDAP中,将数据组织成一个树形结构,这与现实生活中的很多数据结构可以对应起来,而不像设计关系型数据库的表,需要进行多种变化。例如,图1-1所示就是一个树形结构的数据。
在图1-1所示的树形结构中,树的根结点是一个组织的域名(dlw.com),其下分为3个部分,分别是managers、people和group,可将这3个组看作组织中的3个部门,如managers用来管理所有管理人员,people用来管理登录系统的用户,group用来管理系统中的用户组。当然,在该图中还可继续增加其他分支。
对于图1-1所示的树形结构,使用关系数据库来保存数据的话,需要设置多个表,一层一层分别保存,当需要查找某个信息时,再逐层进行查询,最终得到结果。
若使用目录来保存该图中的数据,则更直观。图中每个结点用一个条目来保存,不同类型的结点需要保存的数据可能不同,在LDAP中通过一个称为objectClass的类型来控制不同结点需要的数据(称为属性)。
对于目录中的数据怎样进行引用呢?前面提到过,每一个条目都有一个dn,因为dn是唯一的,因此就可找到需要结点的数据。dn的构造方式如下:
首先得到条目自己的名称(rdn,称为相对dn),然后开始向上逐级查找父结点,一直到根项为止。例如,对于图1-1中最右下方的结点,其dn为:
Python代码
- dn: cn=ldap, ou=group, o=dlw.com
通过这样的方式,即可唯一标识每一个结点。
在现实生活中,有很多这种树形结构的数据,如计算机文件系统的目录结构、Internet中的域名等。这些类型的数据,只要不需要频繁的更新,都适合用目录来保存。
LDAP的功能
在LDAP的功能模型中定义了一系列利用LDAP协议的操作,主要包含以下4部分:
- 查询操作 :允许查询目录和取得数据,其查询性能比关系数据库好。
- 更新操作 :目录的更新操作没关系数据库方便,更新性能较差,但也同样允许进行添加、删除、修改等操作。
- 复制操作 :前面也提到过,LDAP是一种典型的分布式结构,提供复制操作,可将主服务器的数据的更新复制到设置的从服务器中。
- 认证和管理操作 :允许客户端在目录中识别自己,并且能够控制一个会话的性质。
LDAP协议的特点
- LDAP是一种目录服务,保存在特殊的数据库中,数据的读取速度远高于写入速度。
- LDAP对查询做了优化,读取速度优于普通关系数据库。
- LDAP不支持事务、不能进行回滚,需要进行这些操作的应用只有选择关系数据库。
- LDAP采用服务器/客户端模式,支持分布式结构。
- LDAP中的条目以树形结构组织和存储。
- LDAP基于Internet协议,直接运行在简单和通用的TCP/IP或其他可靠的传输协议层上,使连接的建立和包的处理简单、快捷,对于互联网和企业网应用都很方便。
- LDAP协议简单,通过使用查找操作实现列表操作和读操作。
- LDAP通过引用机制实现分布式访问,通过客户端API实现分布式操作(对于应用透明),平衡了负载。
- LDAP实现具有低费用、易配置和易管理的特点,并提供了满足应用程序对目录服务所需求的特性。