什么是LDAP 服务器?
LDAP(轻量级目录访问协议)服务器是一个集中式身份管理系统,它存储和管理用户、组和其他目录信息。其目的是通过提供一个集中点来管理和访问身份信息,从而简化和增强身份管理。
LDAP 服务器如何工作
LDAP 服务器基于客户机-服务器架构。客户机向服务器发送请求,服务器使用 LDAP 协议响应请求。LDAP 协议使用目录信息树 (DIT) 模型来组织和存储数据。DIT 中的数据以条目组织,条目又由
LDAP 服务器的最佳实践
- 使用强健的密码政策。
- 定期备份 LDAP 数据库。
- 实施访问控制措施以限制对 LDAP 服务器的访问。
- 监视 LDAP 服务器以检测任何可疑活动。
- 与供应商合作以获得持续的技术支持。
结论
LDAP 服务器是实现集中式身份管理、提高效率和增强可伸缩性的强大工具。通过提供一个集中点来管理身份信息,LDAP 服务器简化了身份管理流程,提高了安全性,并支持 SSO 和可扩展性。通过遵循最佳实践,组织可以有效地部署和管理 LDAP 服务器,从而为其 IT 环境带来显着的优势。
ldap统一用户认证
LDAP(LightweightDirectoryAccessProtocol)是一种轻量级目录访问协议,它可以提供一种统一的用户认证机制,使得企业内部的不同应用系统可以共享同一套用户账号和密码,从而实现用户认证的统一管理。在本文中,我们将介绍如何使用LDAP来实现统一用户认证。
一、LDAP基本概念
1.1目录服务
LDAP是一种目录服务,它可以存储和管理各种类型的数据,比如用户账号、组织结构、网络资源等等。LDAP的数据结构是树形结构,类似于文件系统中的目录结构,每个节点都有一个唯一的DN(DistinguishedName)标识符。
1.2LDAP客户端
LDAP客户端是指使用LDAP协议与LDAP服务器进行通信的应用程序,它可以实现对LDAP服务器中数据的查询、添加、修改和删除等操作。
1.3LDAP服务器
LDAP服务器是指提供LDAP服务的软件系统,它可以存储和管理LDAP目录中的数据,并提供LDAP协议的接口供LDAP客户端进行访问。
二、LDAP统一用户认证的实现步骤
2.1安装配置LDAP服务器
首先需要安装和配置LDAP服务器,常用的LDAP服务器有OpenLDAP、ActiveDirectory等。这里以OpenLDAP为例进行说明。
2.1.1安装OpenLDAP
在Linux系统中,可以使用以下命令安装OpenLDAP:
yuminstallopenldapopenldap-serversopenldap-clients
2.1.2配置OpenLDAP
配置OpenLDAP需要编辑文件,该文件位于/etc/openldap目录下。可以使用以下命令打开该文件:
vi/etc/openldap/
在该文件中,需要配置以下内容:
(1)基本配置
include/etc/openldap/schema/
pidfile/var/run/openldap/
argsfile/var/run/openldap/
(2)数据库配置
databasebdb
suffixdc=example,dc=com
rootdncn=admin,dc=example,dc=com
rootpw{SSHA}xxxxxxxxxxxxxxxxxxxxxx
directory/var/lib/ldap
其中,database表示使用BDB数据库,suffix表示LDAP根节点的DN,rootdn表示管理员账号的DN,rootpw表示管理员账号的密码,directory表示存储LDAP数据的目录。
2.2添加LDAP用户
添加LDAP用户需要使用LDAP客户端,常用的LDAP客户端有ldapadd、ldapmodify等。这里以ldapadd为例进行说明。
2.2.1创建LDIF文件
LDIF(LDAPDataInterchangeFormat)是一种文本格式,用于描述LDAP目录中的数据。可以使用以下命令创建一个LDIF文件:
在该文件中,需要添加以下内容:
dn:cn=user1,ou=people,dc=example,dc=com
objectClass:top
objectClass:person
objectClass:organizationalPerson
objectClass:inetOrgPerson
givenName:user1
userPassword:{SSHA}xxxxxxxxxxxxxxxxxxxxxx
其中,dn表示该用户的DN,objectClass表示该用户的对象类别,cn表示该用户的用户名,sn表示该用户的姓氏,givenName表示该用户的名字,mail表示该用户的邮箱,userPassword表示该用户的密码。
2.2.2添加LDAP用户
使用以下命令将该用户添加到LDAP服务器中:
ldapadd-x-Dcn=admin,dc=example,dc=
其中,-x表示使用简单身份验证,-D表示管理员账号的DN,-w表示管理员账号的密码,-f表示要导入的LDIF文件。
2.3集成应用系统
集成应用系统需要在应用系统中配置LDAP认证,常用的应用系统有Web应用、邮件系统、文件共享系统等。这里以Web应用为例进行说明。
2.3.1配置Web应用
在Web应用中,可以使用LDAP认证插件来实现LDAP认证。常用的LDAP认证插件有mod_auth_ldap、LDAPAuth等。这里以mod_auth_ldap为例进行说明。
首先需要安装和配置mod_auth_ldap模块,可以使用以下命令安装:
yuminstallhttpdmod_auth_ldap
然后需要编辑文件,该文件位于/etc/httpd/conf目录下。可以使用以下命令打开该文件:
vi/etc/httpd/conf/
在该文件中,需要添加以下内容:
LoadModuleauth_ldap_modulemodules/mod_auth_
AuthNameLDAPAuthentication
AuthTypeBasic
AuthBasicProviderldap
AuthLDAPURLldap:///dc=example,dc=com
AuthLDAPBindDNcn=admin,dc=example,dc=com
AuthLDAPBindPasswordpassword
Requirevalid-user
其中,LoadModule表示加载mod_auth_ldap模块,Location表示需要进行LDAP认证的URL路径,AuthName表示认证提示信息,AuthType表示认证类型,AuthBasicProvider表示认证提供者,AuthLDAPURL表示LDAP服务器的URL,AuthLDAPBindDN表示管理员账号的DN,AuthLDAPBindPassword表示管理员账号的密码,Require表示需要进行认证的用户。
2.3.2测试LDAP认证
使用浏览器访问Web应用的URL路径,输入LDAP用户的用户名和密码,如果能够成功登录,则说明LDAP认证已经生效。
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目录的优势 如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于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目录中是十分有效的: l 公司员工的电话号码簿和组织结构图 l 客户的联系信息 l 计算机管理需要的信息,包括NIS映射、email假名,等等 l 软件包的配置信息 l 公用证书和安全密匙 什么时候该用LDAP存储数据 大多数的LDAP服务器都为读密集型的操作进行专门的优化。
因此,当从LDAP服务器中读取数据的时候会比从专门为 OLTP优化的关系型数据库中读取数据快一个数量级。
也是因为专门为读的性能进行优化,大多数的LDAP目录服务器 并不适合存储需要需要经常改变的数据。
例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为 电子商务站点的数据库服务器。
如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。
l 需要在任何平台上都能读取数据吗? l 每一个单独的记录项是不是每一天都只有很少的改变? l 可以把数据存在平面数据库(flat, c=US (以X.500格式表示的基准DN) 在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。
c=US 表示公司的总部在美国。
以前,一般 都用这种方式来表示基准DN。
但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。
随着 Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。
现在,X.500格式发展成下面列出的两种格式。
o= (用公司的Internet地址表示的基准DN) 这种格式很直观,用公司的域名作为基准DN。
这也是现在最常用的格式。
dc=foobar, dc=com (用DNS域名的不同部分组成的基准DN) 就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式 把分成两部分 dc=foobar, dc=com。
在理论上,这种格式可能会更灵活一点,但是对于最终用户来说 也更难记忆一点。
考虑一下这个例子。
当和合并之后,可以简单的把“dc=com当作基 准DN。
把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果和 合并,这个方法就不能用了)。
如果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。
l 我的LDAP目录的基准DN是dc=foobar,dc=com l 我把自己的食谱作为LDAP的记录项存在ou=recipes l 我的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中存储的一些信息: l 员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。
l 物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。
l 客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。
l 会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。
l 食谱信息:菜的名字、配料、烹调方法以及准备方法。
因为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: mailhost: 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: mailhost: 就象现在大多数的公司都上网了,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服务器,地址为,端口为389。
Netscape Communicator 的电子邮件查询功能、UNIX的“ph命令要用到这个服务器,用户也可以在任何地方查询这个服务器上的员工 和客户联系信息。
公司的主LDAP服务器运行在相同的计算机上,不过端口号是1389。
你可能即不想让员工查询资产管理或食谱的信息,又不想让信息技术人员看到整个公司的LDAP目录。
为了解决 这个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上,不复制需要隐藏的信息。
为了保持数据始终是最新的,主目录服务器被设置成即时“推”同步。
这些种方法主要是为了方便,而不是安全, 因为如果有权限的用户想查询所有的数据,可以用另一个LDAP端口。
假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。
可以建立从:1389 到:389的数据复制,象下面这样: periodic pull: ou=asia,ou=customers,o= periodic pull: ou=us,ou=customers,o= immediate push: ou=europe,ou=customers,o= “拉”连接每15分钟同步一次,在上面假定的情况下足够了。
“推”连接保证任何欧洲的联系信息发生了变化就 立即被“推”到Munich。
用上面的复制模式,用户为了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地连接到本地服务 器。
如果他们改变了数据,本地的LDAP服务器就会把这些变化传到主LDAP服务器。
然后,主LDAP服务器把这些变化 “推”回本地的“公用”LDAP服务器保持数据的同步。
这对本地的用户有很大的好处,因为所有的查询(大多数是读)都在本地的服务器上进行,速度非常快。
当需要改变信息的时候,最终用户不需要重新配置客户端的软件,因为LDAP目录服务器为他们完成了所有的数据交换工作。
ldap是什么
简单的说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。
LDAP是一个用来发布目录信息到许多不同资源的协议。
通常它都作为一个集中的地址被使用,不过根据组织者的需要,它可以做得更加强大。
LDAP其实是一个电话簿,类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录,也类似于你在花园中所看到的树木。
不少LDAP开发人员喜欢把LDAP与关系数据库相比,认为是另一种的存贮方式,然后在读性能上进行比较。
实际上,这种对比的基础是错误的。
LDAP和关系数据库是两种不同层次的概念,后者是存贮方式(同一层次如网格数据库,对象数据库),前者是存贮模式和访问协议。
LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。
LDAP最基本的形式是一个连接数据库的标准方式。
该数据库为读查询作了优化。
因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。
特殊的数据库从另一个意义上 LDAP是实现了指定的数据结构的存贮,它是一种特殊的数据库。
但是LDAP和一般的数据库不同,明确这一点是很重要的。
LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。
就象Sybase、Oracle、Informix或Microsoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。
换句话来说LDAP目录也是一种类型的数据库,但不是关系型数据库。
要特别注意的是,LDAP通常作为一个 hierarchical数据库使用,而不是一个关系数据库。
因此,它的结构用树来表示比用表格好。
正因为这样,就不能用SQL语句了。
21世纪的LDAP技术发展很快。
几乎所有计算机平台上的所有的应用程序都可以从LDAP目录中获取信息。
LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。
通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。
服务器LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。
复制技术是内置在LDAP服务器中的而且很容易配置。
如果要在DBMS中使用相同的复制功能,数据库厂商就会要你支付额外的费用,而且也很难管理。