LDAP总结:仿冒+改良=创新
一, LDAP 概念
LDAP(Lightweight Directory Access Protocol),轻量级目录访问协议。它是目录访问协议的一个标准。它是基于X.500 标准的,可以根据需要定制。轻量级目录访问协议以信息目录的形式存在,在该目录中可只定义一次用户和组,而在多台机器和多个应用程序间共享它们。
目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。
二, LDAP 组织结构
LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。
条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute):
DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。
属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。
LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。类型的一个例子就是mail,其值将是一个电子邮件地址。
LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织(organization)(o=Acme)或组织单元(organizationalunits) (ou=People)。一个组织单元可能包含诸如所有雇员、大楼内的所有打印机等信息。
此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(surname)和cn(commonname)属性,但也可以包含可选的如邮件,电话号码等属性。
例如: dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
理解:dn是引用的条目,cn指必须实现的属性(cn: Jason H. Smith;sn: Smith 二者都是必需实现的),ou指组织单元,c指的是树根。
三,LDAP 目录设计
设计目录结构是LDAP最重要的方面之一。下面我们将通过一个简单的例子来说明如何设计合理的目录结构。该例子将通过Netscape地址薄来访文。假设有一个位于美国US(c=US)而且跨越多个州的名为Acme(o=Acme)的公司。Acme希望为所有的雇员实现一个小型的地址薄服务器。
我们从一个简单的组织DN开始:
dn: o=Acme, c=US
Acme所有的组织分类和属性将存储在该DN之下,这个DN在该存储在该服务器的目录是唯一的。Acme希望将其雇员的信息分为两类:管理者(ou= Managers)和普通雇员(ou=Employees),这种分类产生的相对区别名(RDN,relativedistinguished names。表示相对于顶点DN)就是:
dn: ou=Managers, o=Acme,c=US
dn: ou=Employees, o=Acme,c=US
在下面我们将会看到分层结构的组成:顶点是US的Acme,下面是管理者组织单元和雇员组织单元。因此包括Managers和Employees的DN组成为:
dn: cn=Jason H. Smith,ou=Managers, o=Acme, c=US
dn: cn=Ray D. Jones,ou=Employees, o=Acme, c=US
dn: cn=Eric S. Woods,ou=Employees, o=Acme, c=US
为了引用Jason H. Smith的通用名(common name )条目,LDAP将采用cn=Jason H. Smith的RDN。然后将前面的父条目结合在一起就形成如下的树型结构:
cn=Jason H. Smith
+ ou=Managers
+o=Acme
+ c=US
->dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
现在已经定义好了目录结构,下一步就需要导入目录信息数据。目录信息数据将被存放在LDIF文件中,其是导入目录信息数据的默认存放文件。用户可以方便的编写Perl脚本,来从例如/etc/passwd、NIS等系统文件中自动创建LDIF文件。
下面的实例保存目录信息数据为testdate.ldif文件,该文件的格式说明将可以在man ldif中得到。
在添加任何组织单元以前,必须首先定义Acme DN:
dn: o=Acme, c=US
objectClass: organization
这里o属性是必须的
o: Acme
下面是管理组单元的DN,在添加任何管理者信息以前,必须先定义该条目。
dn: ou=Managers, o=Acme,c=US
objectClass:organizationalUnit
这里ou属性是必须的。
ou: Managers
第一个管理者DN:
dn: cn=Jason H. Smith,ou=Managers, o=Acme, c=US
objectClass: inetOrgPerson
cn和sn都是必须的属性:
cn: Jason H. Smith
sn: Smith
但是还可以定义一些可选的属性:
telephoneNumber:111-222-9999
mail: headhauncho@acme.com
localityName: Houston
四,LDAP和数据库
严格意义上说,LDAP根本不是数据库而是用来访问存储在信息目录(也就是LDAP目录)中的信息的协议。
LDAP和关系数据库是两种不同层次的概念,后者是存贮方式(同一层次如网格数据库,对象数据库),前者是存贮模式和访问协议。LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。LDAP最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。
LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。
目录是特殊化的数据库, 有着与传统意义上的关系数据库不同的特征:
(1)用户访问目录通常比更新目录多得多,目录适合存储相对静态的信息。
(2)目录不支持事务机制
(3)信息访问机制不同:
大多数关系数据库支持标准化的sql访问方式,而LDAP目录的访问使用简单的而又优化的访问方式。
五,附录
(1)常见的目录服务软件
· X.500
· LDAP
· ActriveDirectory,Microsoft公司
· NIS
(2)X.500
X.500是一套已经被国际标准化组织(ISO)接受的目录服务系统标准,它定义了一个机构如何在全局范围内共享其名字和与之相关的对象。X.500是层次性的,其中的管理域(机构、分支、部门和工作组)可以提供这些域内的用户和资源信息。在PKI体系中,X.500被用来唯一标识一个实体,该实体可以是机构、组织、个人或一台服务器。X.500被认为是实现目录服务的最佳途径,但X.500的实现投资较大,并且比其他方式速度慢,而其优势具有信息模型、多功能和开放性。
X.500目录服务是一个高度复杂的信息存储机制,包括客户机-目录服务器访问协议、服务器-服务器通信协议、完全或部分的目录数据复制、服务器链对查询的响应、复杂搜寻的过滤功能等。
在X.500目录结构中,客户机查询并接收来自服务器目录服务中的一台或多台服务器上的响应,目录访问协议(DAP)控制服务器和客户机之间的通信。
目录系统代理(DSA,Directory System Agent)是指一种用于存储目录信息的数据库。该数据库采用分层格式,提供快速而高效的搜索功能。DSA与目录信息树(DIT,Directory Information Tree)相连接。目录用户代理(DUA,Directory User Agent)是用于访问一个或多个DSA的用户接口程序。DUA包括whois、查找器(finger),以及提供图形用户界面的相关程序等。
目录系统协议(DSP,Directory System Protocol)主要控制两个或多个目录系统代理、目录用户代理和目录系统代理间的交互操作。具体实现过程是:终端用户在不知道某特定信息具体位置的情况下,就可以访问目录中的信息。
X.500 主要具备以下特征:
分散维护(Decentralized Maintenance):运行X.500的每个站点只负责其本地目录部分,所以可以立即进行更新和维护操作。
强大的搜索性能:X.500提供强大的搜索功能,支持用户建立的任意复杂查询。
单一全局命名空间(Single Global Namespace):类似于DNS,X.500为用户提供单一的相同命名空间(Single HomegeneousNamespace)。与DNS相比,X.500的命名空间更灵活且易于扩展。
结构化信息结构(Structured InformationFramework):X.500目录中定义了信息结构,允许本地扩展。
基于标准的目录服务(Standards-Based DirectoryService):由于X.500可以被用于建立一个基于标准的目录,那么在某种意义上,请求应用目录信息(电子邮件、资源自动分配器、特定目录工具)的应用程序就能访问重要且有价值的信息。
由于X.500的实施太过于复杂而受到异议,为解决这个问题,后来有人推出了一种较为简单的基于TCP/IP的DAP新版本,即轻量级目录访问协议(LDAP,Lightweight DirectoryAccess Protocol),主要用于Internet。LDAP与DAP具有很多类似的基本功能,另外它还能用来查询私有目录和开放X.500目录上的数据。在过去的几年里,大多数主要的电子邮件和目录服务软件供应商都对LDAP表现出了极大的兴趣,LDAP已迅速发展成为Internet上事实的目录协议标准。
参考:
http://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html
http://blog.sina.com.cn/s/blog_6151984a0100ey3z.html