分类: LINUX
2011-12-26 20:06:21
第十四章
LDAP中的objectClass与Attribute
初学LDAP时容易弄错的问题就是objectClass和Attribute之间的关系的,当时找过许多的中文资料都没有得到答案。最近终于彻底弄明白了这个问题,于是决定做个笔记。下面我会对照Java里面的一些概念来讲讲LDAP中的objectClass与Attribute,非常惊喜的是他们非常相似!
LDAP中每一个Entry必须属于某一个objectClass,用Java的方式来理解就是Entry是一个Instance,而objectClass就是class。在Java中Class可以分为Abstract,concrete两种,我们知道要new一个Instance时必须要有一个concrete Class。在LDAP中objectClass分为三种:Abstract,Structural,AUXIALIARY。要定义一个Entry必须包含一个Structural类型的ObjectClass,其他两个类型可包括0或多个。 其中Top是一个顶级ObjectClass,里面定义了一个MUST Attribute:ObjectClass,于是也就决定了必须有一个其它的Structural ObjectClass才能定义一个Entry.其中ObjectClass又可以存在继承关系,该继承关系于Java中有点相似,子ObjectClass会继承父ObjectClass中的全部Attribute.
下面分析一下ObjectClass与Attribute的关系。
如同Java里面的一个类可以包括多个Field,在业务上可能会定义某些Field是必须的,另外一些是可选的。在LDAP中也存在类似关系,每一个ObjectClass都定义了一些Attribute,其Attribute仍然可以是ObjectClass。在这些Attriubte中分为两种类型MUST,MAY, MUST表示这个Entry必须包括的属性,MAY为可选。一个ObjectClass的Attribute也包括所有继承自父ObjectClass和自身定义的ObjectClass。
下面用一个类型进行说明:
objectclass ( 2.5.6.0 NAME 'top' ABSTRACT
MUST objectClass )
objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject'
DESC 'RFC2247: domain component object'
SUP top AUXILIARY
MUST dc )
上面是两个objectclass的定义,其中top为ABSTRACT,dcObject为AUXILIARY,这两个类型都不能定义Entry.下面这个LDIF文件在导入到LDAP时会出错:
dn: dc=java,dc=com
objectClass:dcObject
dc: java.com
要定义这个Entry必须找到一个STRUCTURAL类型的ObjectClass。
objectClasses: ( 2.5.6.4 NAME 'organization'
DESC 'RFC2256: an organization' SUP top STRUCTURAL
MUST o
MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory
$ x121Address $ registeredAddress $ destinationIndicator
$ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier
$ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber
$ street $ postOfficeBox $ postalCode $ postalAddress
$ physicalDeliveryOfficeName $ st $ l $ description ) )
这个objectClass的类型为STRUCTURAL,因此可以用来定义Entry.具体定义如下
dn: dc=java,dc=com
objectClass:dcObject
objectClass:organization
dc: java.com
o: java.com
其中dc:java.com为dcObject的MUST Attribute,o: java.com为organization的MUST Attribute。