LDAP详解.doc

上传人:文库蛋蛋多 文档编号:2397095 上传时间:2023-02-17 格式:DOC 页数:7 大小:28.50KB
返回 下载 相关 举报
LDAP详解.doc_第1页
第1页 / 共7页
LDAP详解.doc_第2页
第2页 / 共7页
LDAP详解.doc_第3页
第3页 / 共7页
LDAP详解.doc_第4页
第4页 / 共7页
LDAP详解.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《LDAP详解.doc》由会员分享,可在线阅读,更多相关《LDAP详解.doc(7页珍藏版)》请在三一办公上搜索。

1、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目录中可以存储各种类型的数据电子邮件地址、邮件路由信息、人力资

2、源数据、公用密匙、联系人列表等等。通过把LDAP目录作为系统集成中的一个重要环节可以简化员工在企业内部查询信息的步骤甚至连主要的数据源都可以放在任何地方。 LDAP目录的优势 如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式即前端使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT IIS Access 数据库或者是SQL服务器IIS和数据库之间通过ASP技术使用ODBC进行连接达到通过填写表单查询数据的功能后端在Linux系统的典型实现可能是Linux Apache postgresqlApache和

3、数据库之间通过PHP3提供的函数进行连接。使用上述方法的缺点是后端关系数据库的引入导致系统整体的性能降低和系统的管理比较繁琐因为需要不断的进行数据类型的验证和事务的完整性的确认并且前端用户对数据的控制不够灵活用户权限的设置一般只能是设置在表一级而不是设置在记录一级。 目录服务的推出主要是解决上述数据库中存在的问题。目录与关系数据库相似是指具有描述性的基于属性的记录集合但它的数据类型主要是字符型为了检索的需要添加了BIN二进制数据、CIS忽略大小写、CES大小写敏 感、TEL电话型等语法Syntax而不是关系数据库提供的整数、浮点数、日期、货币等类型同样也不提供象关系数据库中普遍包含的大量的函数

4、它主要面向数据的查询服务查询和修改操作比一般是大于10:1不提供事务的回滚rollback机制它的数据修改使用简单的锁定机制实现All-or-Nothing它的目标是快速响应和大容量查询并且提供多目录服务器的信息复制功能。 现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。可能LDAP最大的优势是可以在任何计算机平台上用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易 定制应用程序为它加上LDAP的支持。 LDAP协议是跨平台的和标准的协议因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上LDAP得到了业界的广

5、泛认可因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持因为他们根本不用考虑另一端客户端或服务端是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器或者还可能是具有LDAP界面的关系型数据库因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是如果软件产商想在软件产品中集成对DBMS的支持那么通常都要对每一个数据库服务器单独定制。不象很多商用的关系型数据库你不必为LDAP的每一个客户端连接或许可协议付费 大多数的LDAP服务器安装起来很简单也容易维护和优化。 LDAP服务器可以用“推”或“拉”的方法复制部分或全

6、部数据例如可以把数据“推”到远程的办公室以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能数据库 产商就会要你支付额外的费用而且也很难管理。 LDAP允许你根据需要使用ACI一般都称为ACL或者访问控制列表控制对数据读和写的权限。例如设备管理员可以有权改变员工的工作地点和办公室号码但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的所以不用担心在客户端的应用程序上是否要进行安全检查。 LDAPLightweight Directory Ac

7、ess Protocol是目录服务在TCP/IP上的实现RFC 1777 V2版和RFC 2251V3版。它是对X500的目录协议的移植但是简化了实现方法所以称为轻量级的目录服务。在LDAP中目录是按照树型结构组织目录由条目Entry组成条目相当于关系数据库中表的记录条目是具有区别名DNDistinguished Name的属性Attribute集合DN相当于关系数据库表中的关键字Primary Key属性由类型Type和多个值Values组成相当于关系数据库中的域Field由域名和数据类型组成只是为了方便检索的需要LDAP中的Type可以有多个Value而不是关系数据库中为降低数据的冗余性要

8、求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织非常的直观。LDAP把数据存放在文件中为提高效率可以使用基于索引的文件数据库而不是关系数据库。LDAP协议集还规定了DN的命名方法、存取控制方法、搜索格式、复制方法、URL格式、开发接口等LDAP对于这样存储这样的信息最为有用也就是数据需要从不同的地点读取但是不需要经常更新。 例如这些信息存储在LDAP目录中是十分有效的 l 公司员工的电话号码簿和组织结构图 l 客户的联系信息 l 计算机管理需要的信息包括NIS映射、email假名等等 l 软件包的配置信息 l 公用证书和安全密匙 什么时候该用LDAP存储数据

9、 大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此当从LDAP服务器中读取数据的时候会比从专门为OLTP优化墓叵敌褪菘庵卸寥菘煲桓鍪考丁彩且蛭盼恋男阅芙杏呕蠖嗍腖DAP目录服务器并不适合存储需要需要经常改变的数据。例如用LDAP服务器来存储电话号码是一个很好的选择但是它不能作为电子商务站点的数据库服务器。 如果下面每一个问题的答案都是“是”那么把数据存在LDAP中就是一个好主意。 l 需要在任何平台上都能读取数据吗 l 每一个单独的记录项是不是每一天都只有很少的改变 l 可以把数据存在平面数据库flat database而不是关系型数据库中吗换句话来说也就是不管什么范式不范式的把所

10、有东西都存在一个记录中差不多只要满足第一范式。 最后一个问题可能会唬住一些人其实用平面数据库去存储一些关系型的数据也是很一般的。例如一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法如果可以把保数据存在一张张的卡片里就可以很容易地把它存在LDAP目录里。 安全和访问控制 LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制这比用客户端的软件保证数据的安全可安全多了。用LDAP的ACI可以完成 l 给予用户改变他们自己的电话号码和家庭地址的权限但是限制他们对其它数据如职务名称经理的登录名等等只有“只读”权限。 l 给予“HR

11、-admins组中的所有人权限以改变下面这些用户的信息经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。 l 禁止任何人查询LDAP服务器上的用户口令但是可以允许用户改变他或她自己的口令。 l 给予经理访问他们上级的家庭电话的只读权限但是禁止其他人有这个权限。 l 给予“host-admins组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息 l 通过Web允许“foobar-sales组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理PDA上。如果销售人员的软件都支持L

12、DAP这将非常有用 l 通过Web允许组的所有者删除或添加他们拥有的组的成员。例如可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名mail aliase的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。 “公用”的邮件列表应该允许用户从邮件假名中添加或删除自己但是只能是自己。也可以对IP地址或主机名加以限制。例如某些域只允许用户IP地址以192.168.200.开头的有读的权限或者用户反向查找DNS得到的主机名必须为。 LDAP目录树的结构 LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉也就很容易掌握LDAP目

13、录树这个概念了。就象DNS的主机名那样LDAP目录记录的标识名Distinguished Name简称DN是用来读取单个记录以及回溯到树的顶部。后面会做详细地介绍。 为什么要用层次结构来组织数据呢原因是多方面的。下面是可能遇到的一些情况 l 如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室负责营销的LDAP服务器上但是你不想把公司的资产管理信息“推”到那里。 l 你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里资产管理组对“asset-mgmt部分有完全的访问权限但是不能访问其它地方。 l 把LDAP存储和复制功能结合起来可以定制目录树的结构以降低对WAN带宽的

14、要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息但是欧洲的销售情况就只要每小时更新一次就行了。 刨根问底基准DN LDAP目录树的最顶部就是根也就是所谓的“基准DN。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作这家公司在Internet上的名字是。 oFooBar Inc. cUS以X.500格式表示的基准DN 在这个例子中oFooBar Inc.表示组织名在这里就是公司名的同义词。cUS 表示公司的总部在美国。以前一般都用这种方式来表示基准DN。但是事物总是在不断变化的现在所有的公司都已经或计划上Internet上。随着Internet的全

15、球化在基准DN中使用国家代码很容易让人产生混淆。现在X.500格式发展成下面列出的两种格式。 用公司的Internet地址表示的基准DN 这种格式很直观用公司的域名作为基准DN。这也是现在最常用的格式。 dcfoobar dccom 用DNS域名的不同部分组成的基准DN 就象上面那一种格式这种格式也是以DNS域名为基础的但是上面那种格式不改变域名也就更易读而这种格式把域名分成两部分 dcfoobar dccom。在理论上这种格式可能会更灵活一点但是对于最终用户来说也更难记忆一点。考虑一下这个例子。当和合并之后可以简单的把“dccom当作基准DN。把新的记录放到已经存在的dcgizmo dcco

16、m目录下这样就简化了很多工作当然如果和wocket.edu合并这个方法就不能用了。如果LDAP服务器是新安装的我建议你使用这种格式。再请注意一下如果你打算使用活动目录Actrive DirectoryMicrosoft已经限制你必须使用这种格式。 更上一层楼在目录树中怎么组织数据 在UNIX文件系统中最顶层是根目录root。在根目录的下面有很多的文件和目录。象上面介绍的那样LDAP目录也是用同样的方法组织起来的。 在根目录下要把数据从逻辑上区分开。因为历史上X.500的原因大多数LDAP目录用OU从逻辑上把数据分开来。OU表示“Organization Unit在X.500协议中是用来表示公司

17、内部的机构销售部、财务部等等。现在LDAP还保留ou这样的命名规则但是扩展了分类的范围可以分类为oupeople ougroups oudevices等等。更低一级的OU有时用来做更细的归类。例如LDAP目录树不包括单独的记录可能会是这样的 dcfoobar dccom oucustomers ouasia ouEurope ouusa ouemployees ourooms ougroups ouassets-mgmt ounisgroups ourecipes 单独的LDAP记录 DN是LDAP记录项的名字 在LDAP目录中的所有记录项都有一个唯一的“Distinguished Name也

18、就 是DN。每一个LDAP记录项的DN是由两个部分组成的相对DNRDN和记录在LDAP目录中的位置。 RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字这个名字通常存在cnCommon Name这个属性里。因为几乎所有的东西都有一个名字在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录我就会用cnOatmeal Deluxe作为记录项的RDN。 l 我的LDAP目录的基准DN是dcfoobardccom l 我把自己的食谱作为LDAP的记录项存在ourecipes l 我的LDAP记录项的RDN设为cnOatmeal

19、 Deluxe 上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住DN的读法和DNS主机名类似。下面就是完整的DN cnOatmeal Deluxeourecipesdcfoobardccom 举一个实际的例子来说明DN 现在为公司的员工设置一个DN。可以用基于cn或uidUser ID作为典型的用户帐号。例如FooBar的员工Fran Smith登录名fsmith的DN可以为下面两种格式 uidfsmithouemployeesdcfoobardccom基于登录名 LDAP以及X.500用uid表示“User ID不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名

20、因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司如果Fran改变了她的名字结婚离婚或宗教原因也用不着改变LDAP记录项的DN。 cnFran Smithouemployeesdcfoobardccom基于姓名 可以看到这种格式使用了Common NameCN。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是如果名字改变了LDAP的记录就要从一个DN转移到另一个DN。但是我们应该尽可能地避免改变一个记录项的DN。 定制目录的对象类型 你可以用LDAP存储各种类型的数据对象只要这些对象可以用属性来表示下面这些是可以在LDA

21、P中存储的一些信息 l 员工信息员工的姓名、登录名、口令、员工号、他的经理的登录名邮件服务器等等。 l 物品跟踪信息计算机名、IP地址、标签、型号、所在位置等等。 l 客户联系列表客户的公司名、主要联系人的电话、传真和电子邮件等等。 l 会议厅信息会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。 l 食谱信息菜的名字、配料、烹调方法以及准备方法。 因为LDAP目录可以定制成存储任何文本或二进制数据到底存什么要由你自己决定。LDAP目录用对象类型object classes的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中你都要根据自己的需要扩展基本的LDAP目录的

22、功能创建新的对象类型或者扩展现存的对象类型。 LDAP目录以一系列“属性对”的形式来存储记录项每一个记录项包括属性类型和属性值这与关系型数据库用行和列来存取数据有根本的不同。下面是我存在LDAP目录中的一部分食谱记录 dn: cnOatmeal Deluxe ourecipes dcfoobar dccom cn: Instant Oatmeal Deluxe recipeCuisine: breakfast recipeIngredient: 1 packet instant oatmeal recipeIngredient: 1 cup water recipeIngredient: 1

23、pinch salt recipeIngredient: 1 tsp brown sugar recipeIngredient: 1/4 apple any type 请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的而不是在每一个属性的后面用逗号把一系列值分开。 因为用这样的方式存储数据所以数据库就有很大的灵活性不必为加入一些新的数据就重新创建表和索引。更重要的是LDAP目录不必花费内存或硬盘空间处理“空”域也就是说实际上不使用可选择的域也不会花费你任何资源。 作为例子的一个单独的数据项 让我们看看下面这个例子。我们用Foo

24、bar Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIF用来导入和导出LDAP目录的记录项。 dn: uidfsmith ouemployees dcfoobar dccom objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson objectclass: foobarPerson uid: fsmith givenname: Fran sn: Smith cn: Fran Smith cn: Frances Smith telephonenumber: 510

25、-555-1234 roomnumber: 122G o: Foobar Inc. mailRoutingAddress: mailhost: userpassword: crypt3x1231v76T89N uidnumber: 1234 gidnumber: 1200 homedirectory: /home/fsmith loginshell: /usr/local/bin/bash 属性的值在保存的时候是保留大小写的但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性例如password在搜索的时候需要区分大小写。 让我们一点一点地分析上面的记录项。 dn: uidfsmith

26、ouemployees dcfoobar dccom 这是Fran的LDAP记录项的完整DN包括在目录树中的完整路径。LDAP和X.500使用uidUser ID不要把它和UNIX的uid号混淆了。 objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson objectclass: foobarPerson 可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cncommon name和snsurname这两个域不能为空。persion对象类型允许有 其它的可选域包括give

27、nname、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的时候就在脑袋里想一想

28、“login。 请注意CN有多个值。就象上面介绍的LDAP允许某些属性有多个值。为什么允许有多个值呢假定你在用公司的LDAP服务器查找Fran的电话号码。你可能只知道她的名字叫Fran但是对人力资源处的人来说她的正式名字叫做Frances。因为保存了她的两个名字所以用任何一个名字检索都可以找到Fran的电话号码、电子邮件和办公房间号等等。 mailRoutingAddress: mailhost: 就象现在大多数的公司都上网了Foobar用Sendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。 Userpass

29、word: crypt3x1231v76T89N 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的集成。 LD

30、AP复制 LDAP服务器可以使用基于“推”或者“拉”的技术用简单或基于安全证书的安全验证复制一部分或者所有的数据。 例如Foobar有一个“公用的”LDAP服务器地址为端口为389。Netscape Communicator的电子邮件查询功能、UNIX的“ph命令要用到这个服务器用户也可以在任何地方查询这个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计算机上不过端口号是1389。 你可能即不想让员工查询资产管理或食谱的信息又不想让信息技术人员看到整个公司的LDAP目录。为了解决这个问题Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上不复制需要隐

31、藏的信息。为了保持数据始终是最新的主目录服务器被设置成即时“推”同步。这些种方法主要是为了方便而不是安全因为如果有权限的用户想查询所有的数据可以用另一个LDAP端口。 假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从:1389到munich-:389的数 据复制象下面这样 periodic pull: periodic pull: immediate push: “拉”连接每15分钟同步一次在上面假定的情况下足够了。“推”连接保证任何欧洲的联系信息发生了变化就立即被“推”到Munich。用上面的复制模式用户为了访问数据需要连接到哪一台服务器呢在Munich的用户可以简单地连接到本地服务器。如果他们改变了数据本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后主LDAP服务器把这些变化“推”回本地的“公用”LDAP服务器保持数据的同步。这对本地的用户有很大的好处因为所有的查询大多数是读都在本地的服务器上进行速度非常快。当需要改变信息的时候最终用户不需要重新配置客户端的软件因为LDAP目录服务器为他们完成了所有的数据交换工作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号