基于 Linux 操作系统的目录服务的实现
本文的目的是通过使用 Linux 系统支持的应用软件包(openldap),快速实现基于
LDAP 协议的目录服务系统来支持 Windows 消息簿中的用户查询功能。作者从用户的观
点介绍了目录服务的特点,并比较了其与通常使用的关系数据库在处 理数据上的差别,作
者只是普通的 Linux 的爱好者,尝试将所学到的一点 Linux 知识进行综合应用,希望对大
家有所启发。
关键字:目录、LDAP。
如果需要开发一种提供公共信息查询的系统,如通过用户姓名能够获得该用户的邮件
地 址、家庭住址等信息,如 Yahoo 提供的 People search 服务和 Windows Outlook 中
提供的消息簿功能。一般的设计方法可能是采用基于 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(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 格式、开发接口等。