`
steven-zhou
  • 浏览: 213147 次
  • 性别: Icon_minigender_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目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把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目录中是十分有效的:
  (1)公司员工的电话号码簿和组织结构图
  (2)客户的联系信息
  (3)计算机管理需要的信息,包括NIS映射、email假名,等等
  (4)软件包的配置信息
  (5)公用证书和安全密匙
什么时候该用LDAP存储数据
  大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。
  如果下面每一个问题的答案都是"是",那么把数据存在LDAP中就是一个好主意。
  (1)需要在任何平台上都能读取数据吗?
  (2)每一个单独的记录项是不是每一天都只有很少的改变?
  (3)可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。
  最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存在一张张的卡片里,就可以很容易地把它存在LDAP目录里。
安全和访问控制
  LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的安全可安全多了。
  用LDAP的ACI,可以完成:
  (1)给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名,等等)只有"只读"权限。
  (2)给予"HR-admins"组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。
  (3)禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。
  (4)给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。
  (5)给予"host-admins"组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息
  (6)通过Web,允许"foobar-sales"组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP,这将非常有用)
  (7)通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名(mail aliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。"公用"的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址以192.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须为*.foobar.com。
LDAP目录树的结构
  LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取单个记录,以及回溯到树的顶部。后面会做详细地介绍。
  为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况:
  (1)如果你想把所有的美国客户的联系信息都"推"到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想把公司的资产管理信息"推"到那里。
  (2)你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对"asset-mgmt"部分有完全的访问权限,但是不能访问其它地方。
  (3)把LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。
刨根问底:基准DN
  LDAP目录树的最顶部就是根,也就是所谓的"基准DN"。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作,这家公司在Internet上的名字是foobar.com。
o="FooBar, Inc.", c=US
(以X.500格式表示的基准DN)
  在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。
o=foobar.com
(用公司的Internet地址表示的基准DN)
  这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。
dc=foobar, dc=com
(用DNS域名的不同部分组成的基准DN)
  就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式把域名:foobar.com分成两部分 dc=foobar, dc=com。在理论上,这种格式可能会更灵活一点,但是对于最终用户来说也更难记忆一点。考虑一下foobar.com这个例子。当foobar.com和gizmo.com合并之后,可以简单的把"dc=com"当作基准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果foobar.com和wocket.edu合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动目录(Actrive Directory),Microsoft已经限制你必须使用这种格式。
分享到:
评论

相关推荐

    ldap简介

    【LDAP简介】 LDAP,全称为Lightweight Directory Access Protocol,是一种轻量级的目录访问协议,设计目的是为了在互联网上提供高效、简洁的方式来访问和管理分布式目录信息。它源于X.500标准,但简化了许多复杂的...

    LDAP简介.pdf

    ### LDAP协议概览 #### 一、协议概述 LDAP,全称Lightweight Directory Access Protocol(轻量级目录访问协议),是一种广泛应用于网络环境中的目录访问协议。目录在计算机科学中被视为一种特殊形式的数据库,主要...

    LdapBrowser2.82版和LDAP使用手册

    **LDAP简介** LDAP,全称为轻量级目录访问协议(Lightweight Directory Access Protocol),是一种用于访问和管理分布式目录服务的标准网络协议。它主要用于存储和检索用户、组织、资源等信息,广泛应用于身份验证...

    简单的ldap客户端,可替代ldapAdmin

    **LDAP简介** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,常用于存储和检索用户账户、联系人信息、配置数据等结构化信息。它基于X.500标准,但设计得更为简单且适合互联网环境。LDAP...

    浅谈Spring Security LDAP简介

    浅谈Spring Security LDAP简介 本资源主要介绍了Spring Security LDAP的基本概念和配置方法,通过示例代码和详细的解释,帮助读者更好地理解和应用Spring Security LDAP。 一、Spring Security LDAP概述 LDAP...

    使用Python读取Ldap中的用户名

    1. **LDAP简介** 2. **Python LDAP模块介绍** 3. **Python脚本配置与执行** 4. **脚本解析** - 连接LDAP服务器 - 搜索过滤器 - 处理搜索结果 - 错误处理 5. **最佳实践与优化建议** #### 1. LDAP简介 轻量目录...

    spring-ldap1.3.1

    1. LDAP简介: LDAP是一种应用层协议,主要用于存储和检索分布式身份信息。它基于X.500标准,但设计得更加轻量级,适用于互联网环境。LDAP目录通常用于存储用户账户、组信息和其他元数据,便于网络服务进行认证和...

    LDAP基础培训资料

    LDAP简介** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,主要用于组织和检索分布式信息。它源于X.500标准,但比X.500更为简洁,并允许根据需求进行定制。与X.500不同,LDAP支持TCP/...

    LDAP.rar_java ldap_ldap_ldap java

    **LDAP简介** Lightweight Directory Access Protocol(轻量级目录访问协议)是互联网上广泛使用的协议,用于访问和管理分布式目录服务。它提供了一种标准的方法来存储、查询和更新各种网络资源的信息,如用户账户...

    大数据组件集成LDAP

    #### 一、LDAP简介 LDAP (Lightweight Directory Access Protocol) 是一种基于X.500标准的轻量级目录访问协议,它被广泛应用于构建目录服务,用于存储组织的人员、设备和其他资源的信息。在大数据场景中,LDAP通常被...

    基于web的LDAP浏览器(Web LDAP Browser)

    **LDAP简介** LDAP是一种开放标准的目录访问协议,用于存储和检索分布式网络中的结构化数据。它设计的目标是快速、高效地查找和管理网络资源,如用户账户、组、电子邮件地址、打印机等。LDAP目录服务使用层次结构的...

    LDAP开发SampleCode

    #### 一、LDAP简介与应用 - **LDAP**(Lightweight Directory Access Protocol)是一种基于TCP/IP的应用层协议,用于访问和管理目录服务。它最初是为了替代X.500而设计的一种轻量级目录访问协议。 - **LDAP**主要...

    LdapBrowser.rar

    **一、LDAP简介** LDAP(Lightweight Directory Access Protocol)是一种开放标准的网络协议,用于访问和管理分布式目录服务。它主要用于存储和检索用户账户、组织结构、联系人信息等结构化数据。LDAP目录服务在企业...

    Spring LDAP 简单使用

    **Spring LDAP 简介** Spring LDAP 是一个用于简化Java应用程序与LDAP(轻量级目录访问协议)交互的框架。它构建在Spring框架之上,提供了一种声明式的方式来处理 LDAP 查询,使得开发者能够更容易地集成LDAP服务到...

    Laravel开发-laravel-ldap

    **LDAP 简介** LDAP 是一种目录服务协议,用于存储和检索用户、组、资源等信息。它通常用作企业的身份验证和授权中心,为多个应用提供单一登录(Single Sign-On, SSO)能力。通过 LDAP,用户可以在不同的系统中使用同...

    LDAPBrowser_282.zip

    **LDAP简介** LDAP是一种开放的标准,用于存储和检索分布式目录信息。它基于X.500标准,但设计得更轻便,适合互联网环境。通过使用TCP/IP协议,LDAP可以在网络上快速查找和管理用户账户、组、资源等信息。LDAP目录...

    LdapBrowser

    LDAP简介** LDAP是一种应用广泛的目录访问协议,常用于存储和查询组织结构数据。它以树形结构组织信息,支持快速查找和检索用户账户、组成员关系、联系人信息等。LDAP服务器通常用于身份验证、授权和信息共享,...

    LDAP入門LDAP入門LDAP入門

    #### LDAP简介 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)是一种基于TCP/IP的应用层协议,用于访问和管理分布式目录服务。最初由Tim Howes等人在1993年设计,作为X.500目录服务的轻量化版本...

    spring-security-ldap-2.0.1

    1. LDAP简介:LDAP是一种轻量级目录访问协议,用于存储和检索分布式目录服务中的数据。它提供了一种标准的方式来管理和访问用户信息,如用户名、密码、联系信息等。 2. Spring Security LDAP:Spring Security LDAP...

Global site tag (gtag.js) - Google Analytics