许多在网路上的执行程式,都需要相关使用者的资讯,因此在维护多个系统同步化的考量上,有效的储存与管理这些资讯,俨然变成企业E化过程中一个最重要的环节。
目录服务的简介
在了解目录服务之前,我们必须先了解什么是「命名服务」。所谓的命名服务(Naming Service)就是把一个资讯或资源,利用一个唯一的名称来产生关联的服务,例如常见的域名解析(Domain Name Server,DNS)就类似命名服务;它是将一个IP搭配一个域名(Domain Name)来作为唯一的关联,除非有人去更改设定,不然Domain Name都只会指向同一个IP,而命名服务的目的也是一样。
在了解命名服务后,就可以谈目录服务了。目录服务是指一群有着相同属性资料的列表,举例来说,电话簿就是一种目录服务,也就是俗称的黄皮书。电话簿通常都是以规则性的方式将资料储存成列表,并提供索引的功能,以便让使用者能够进行快速的资料查询,如查询电话或地址。而为了要让电脑系统也拥有查询和索引的功能,于是便设计出目录服务的技术。
目录服务可让使用者在网路上快速撷取资讯,它们针对经常读取且很少写入的资料作最佳化,而所有的目录服务都一定含有一个命名服务。因为目录服务是建立在命名服务之上,命名服务又是建立在物件之上,所以目录服务除了拥有命名服务的功能外,还提供了查询物件,并且让物件与属性产生关联。
目录服务在于提供使用者查询资料的时候,可由一些基本的关键字来进行资料的查询。举例来说,我们可以从电话簿里,直接依照姓名或资料的名称来进行查询。而在电脑的系统上,当然也可以提供相关的关键字,例如使用找可以直接以印表机的名称查到该印表机的相关资料。
假设使用者无法提供关键字,当然也可以透过分类的方式进行查询,举例来说,使用者要查询一家位于自己住家附近的五金行时,事先并不知道名称,所以这时可以透过电话簿的五金行分类中,找到一家在自己住家附近的五金行,电脑上的目录服务也是如此。不过这比起传统的目录服务来说,又更为有弹性,因为在电脑上,使用者不仅可以用分类来进行资料查询,也可以透过一些特别的资料属性来进行查询。
成为目录服务代名词的LDAP
Lightweight Directory Access Protocal(LDAP)这个名词目前用来作为目录服务的标准,或就代表了目录服务本身。在LDAP独立运作之前,目录服务的标准为X.500,并且它定义了一组相当全面性的目录架构。不过由于X.500在实作上非常困难,加上它本身是使用Open System Interconnection(OSI)OSI网路协定堆叠,所以并没有被广泛的部署;再者也因为厂商的不支援,渐渐地被网路业界淘汰。
而原本是扮演中介角色的LDAP,在一次又一次的发展后,逐渐成为可以独立运作的版本。并且它又是透过TCP/IP传输协定,因此它可以被设计在任何传输协定上执行。此外它也拥有许多异质目录服务介面的能力,这也造成了LDAP不但代替了X.500的功能,甚至还扩充了许多其它的功能,如Simple Authetication and Security Layer(SASL)等。
LDAP的资料结构
LDAP的资料储存方式是将资料依树的的型式储存,并由一个个的Entry构成一个完整的资料目录树(Directory Information Tree,DIT)。每个Entry可以想像成是关联式资料库的横列(Row),里面存放着使用者的资料,在最顶层的资料被称为Suffix。而每个Entry都会有一个Distinguished Name(DN),这个DN是由命名服务转换而来,并且由数个元件组成,作为一个其物件唯一的识别,例如DN:cn = Maggie、ou = HR、o = IBM、c = TW。
每一个DN元件的命名,会与上层的Relative Distinguished Name(RDN)有关系。在刚刚所举的例子里,ou = HR、o = IBM、c = TW便是该DN元件的RDN。此外其他的元素,如c = Country(国家)、o = Organization(组织)等,都有其固定的意义,因此利用这些元素便可以建构出一个独一无二的DN。
Entry是储存资料的地方,一个Entry是由许多属性组合起来,而每个属性都是由一个Type与一个数值(Value)组成,这就有如一笔关联式资料库的Row的资料一样;一笔Row里面有许多的Column,而每个Column则都会有一个型态(Type)和一个数值(Value)存在。
@大標:其他的LDAP议题
LDAP Data Interchange Format
LDAP Data Interchange Format(LDIF)是一个简单的ASCII格式,专门用来表示LDAP资料,并使LDAP伺服器间的资料交换更为方便,下列是一个LDIF的范例:
dn: cn=Sam,ou=People
objectclass: top
objectclass: person
objectclass: ePerson
cn: Sam
mobile: 0939123456
mail: guest@mail.com
复制(Replication)
为了方便资料的复制与同步化,LDAP在制定为标准前,就先把这样的规范给考量进去。透过Replication的方式,不但能改善本地主机对于中央资料的存取,也可以藉由负载平衡(Load Balance)等技术来增加LDAP 伺服器的可靠性。
参照(Referral)
Referral是一个指标,它允许LDAP伺服器连结在一起,使得资料不必全部座落于同一台LDAP伺服器上,而达到资料共享的目的。
结语
LDAP简单的说是可以快速地提供使用者与资源的资讯存取,且是完全为一个分散式的网路环境所设计的一个标准。 LDAP也可以透过Sun的JNDI API进行资料存取,不过不论使用者正在使用的是哪一种平台,LDAP在运用方面都是相当容易的技术。伴随着良好的应用程式设计,LDAP可以满足各式各样的商业需求,并且能充分的回报学习它所花下的时间与努力。
<本文转载自IBM developerWorks官方网站,程裕翔 整理>