此文为copy,只为简单说明,源地址:http://windindream.blog.163.com/blog/static/49359192008311114717239/#_Toc195677486数据库
1. LDAP介绍安全
1.1. LDAP是什么服务器
1.2. LDAP是电话簿网络
1.3. LDAP是否是数据库数据结构
2. LDAP的特色框架
2.1. LDAP的优点ide
2.1.1 跨平台性能
2.1.2 费用及维护优化
2.1.3 复制技术spa
2.1.4 容许使用ACI
2.2. LDAP存储什么数据
2.3. 何时该用LDAP存储数据
3. LDAP的基本模型
3.1 信息模型:描述LDAP的信息表示方式
3.2 命名模型:描述LDAP中的数据如何组织
3.3 功能模型:描述LDAP中的数据操做访问
3.4 安全模型:描述LDAP中的安全机制
3.4.1 身份认证
3.4.2 通信安全
3.4.3 访问控制
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,通常都简称为LDAP。它是基于X.500标准的,可是简单多了而且能够根据须要定制。与X.500不一样,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,全部与LDAP相关的RFC均可以在LDAPman RFC网页中找到。
简单说来,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一般做为一个hierarchal数据库使用,而不是一个关系数据库。所以,它的结构用树来表示比用表格好。正由于这样,就不能用SQL语句了。
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对于这样存储这样的信息最为有用:也就是数据须要从不一样的地点读取,可是不须要常常更新。例如,这些信息存储在LDAP目录中是十分有效的:
l 公司员工的电话号码簿和组织结构图
l 客户的联系信息
l 计算机管理须要的信息,包括NIS映射、email假名,等等
l 软件包的配置信息
l 公用证书和安全密匙
大多数的LDAP服务器都为读密集型的操做进行专门的优化。所以,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是由于专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储须要常常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,可是它不能做为电子商务站点的数据库服务器。
若是下面每个问题的答案都是"是",那么把数据存在LDAP中就是一个好主意。
l 须要在任何平台上都能读取数据吗?
l 每个单独的记录项是否是每一天都只有不多的改变?
l 能够把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来讲,也就是无论什么范式不范式的,把全部东西都存在一个记录中(差很少只要知足第一范式)。
最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很通常的。例如,一条公司员工的记录就能够包含经理的登陆名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:若是能够把保数据存在一张张的卡片里,就能够很容易地把它存在LDAP目录里。
在LDAP中信息以树状方式组织,在树状信息中的基本数据单元是条目,而每一个条目由属性构成,属性中存储有属性值;LDAP中的信息模式,相似于面向对象的概念,在LDAP中每一个条目必须属于某个或多个对象类(Object Class),每一个Object Class由多个属性类型组成,每一个属性类型有所对应的语法和匹配规则;对象类和属性类型的定义都可以使用继承的概念。每一个条目建立时,必须定义所属的对象类,必须提供对象类中的必选属性类型的属性值,在LDAP中一个属性类型能够对应多个值。
在LDAP中把对象类、属性类型、语法和匹配规则统称为Schema(图表),在LDAP中有许多系统对象类、属性类型、语法和匹配规则,这些系统Schema在LDAP标准中进行了规定,同时不一样的应用领域也定义了本身的Schema,同时用户在应用时,也能够根据须要自定义Schema。这有些相似于XML,除了XML标准中的XML定义外,每一个行业都有本身标准的DTD或DOM定义,用户也能够自扩展;也如同XML,在LDAP中也鼓励用户尽可能使用标准的Schema,以加强信息的互联互通。
在Schema中最难理解的是匹配规则,这是LDAP中为了加快查询的速度,针对不一样的数据类型,能够提供不一样的匹配方法,如针对字符串类型的相等、模糊、大于小于均提供本身的匹配规则。
LDAP中的命名模型,也即LDAP中的条目定位方式。在LDAP中每一个条目均有本身的DN和RDN。DN是该条目在整个树中的惟一名称标识,RDN是条目在父节点下的惟一名称标识,如同文件系统中,带路径的文件名就是DN,文件名就是RDN。
在LDAP中共有四类10种操做:查询类操做,如搜索、比较;更新类操做,如添加条目、删除条目、修改条目、修改条目名;认证类操做,如绑定、解绑定;其它操做,如放弃和扩展操做。除了扩展操做,另外9种是LDAP的标准操做;扩展操做是LDAP中为了增长新的功能,提供的一种标准的扩展框架,当前已经成为LDAP标准的扩展操做,有修改密码和StartTLS扩展,在新的RFC标准和草案中正在增长一些新的扩展操做,不一样的LDAP厂商也均定义了本身的扩展操做。
LDAP中的安全模型主要经过身份认证、安全通道和访问控制来实现。
在LDAP中提供三种认证机制,即匿名、基本认证和SASL(Simple Authentication and Secure Layer)认证。匿名认证即不对用户进行认证,该方法仅对彻底公开的方式适用;基本认证均是经过用户名和密码进行身份识别,又分为简单密码和摘要密码认证;SASL认证即LDAP提供的在SSL和TLS安全通道基础上进行的身份认证,包括数字证书的认证。
在LDAP中提供了基于SSL/TLS的通信安全保障。SSL/TLS是基于PKI信息安全技术,是目前Internet上普遍采用的安全服务。LDAP经过StartTLS方式启动TLS服务,能够提供通信中的数据保密性、完整性保护;经过强制客户端证书认证的TLS服务,同时能够实现对客户端身份和服务器端身份的双向验证。
虽然LDAP目前并没有访问控制的标准,但从一些草案中或是事实上LDAP产品的访问控制状况,咱们不难看出:LDAP访问控制异常的灵活和丰富,在LDAP中是基于访问控制策略语句来实现访问控制的,这不一样于现有的关系型数据库系统和应用系统,它是经过基于访问控制列表来实现的,不管是基于组模式或角色模式,都摆脱不了这种限制。
在使用关系型数据库系统开发应用时,每每是经过几个固定的数据库用户名访问数据库。对于应用系统自己的访问控制,一般是须要创建专门的用户表,在应用系统内开发针对不一样用户的访问控制受权代码,这样一旦访问控制策略变动时,每每须要代码进行变动。总之一句话,关系型数据库的应用中用户数据管理和数据库访问标识是分离的,复杂的数据访问控制须要经过应用来实现。
而对于LDAP,用户数据管理和访问标识是一体的,应用不须要关心访问控制的实现。这是因为在LDAP中的访问控制语句是基于策略语句来实现的,不管是访问控制的数据对象,仍是访问控制的主体对象,均是与这些对象在树中的位置和对象自己的数据特征相关。
在LDAP中,能够把整个目录、目录的子树、制定条目、特定条目属性集或符合某过滤条件的条目做为控制对象进行受权;能够把特定用户、属于特定组或全部目录用户做为受权主体进行受权;最后,还能够定义对特定位置(例如IP地址或DNS名称)的访问权。