作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
一个schema是一组规则,它规范着数据在目录中存储的方式。它定义了允许进入的方式,它们的属性架构,和属性的语法规则。
在目录中,数据使用目录入口进行存储。一个入口要求有一个object class和它的属性,属性可有可无。这个object class指定了这个入口描述的是什么样的信息并且定义了它包含的属性集合。每个属性有一个或多个值与其相连。
在IBM的目录系统中是预定义的,但是若有其他额外需求则你可以修改schema。TDS支持动态schema,schema以目录信息的一部分被公布,在DN="cn=schema"这个入口可以取得。相关的API支持这个操作。
schema有着比LDAP RFCs或者标准中更多的信息。TDS规定被命名的上下文定义的schema存储在一个特殊的目录入口“cn=schema”。这个入口包含所有服务器上定义的schema。你可以ldap_search相关的API得到。
schema提供有着下列五种属性类型的值:
objectClasses、attributeTypes、IBMAttributeTypes、matching rules、ldap syntaxes
一个schema样例如下:
objectclasses=( 1.3.6.1.4.1.1466.101.120.111
NAME 'extensibleObject'
SUP top AUXILIARY )
objectclasses=( 2.5.20.1
NAME 'subschema'
AUXILIARY MAY
( dITStructureRules
$ nameForms
$ ditContentRules
$ objectClasses
$ attributeTypes
$ matchingRules
$ matchingRuleUse ) )
objectclasses=( 2.5.6.1
NAME 'alias'
SUP top STRUCTURAL
MUST aliasedObjectName )
attributeTypes {
( 2.5.18.10 NAME 'subschemaSubentry' EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 NO-USER-MODIFICATION
SINGLE-VALUE USAGE directoryOperation )
( 2.5.21.5 NAME 'attributeTypes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.3 USAGE directoryOperation )
( 2.5.21.6 NAME 'objectClasses'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.37 USAGE directoryOperation )
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 USAGE directoryOperation )
}
ldapSyntaxes {
( 1.3.6.1.4.1.1466.115.121.1.5 DESC 'Binary' )
( 1.3.6.1.4.1.1466.115.121.1.7 DESC 'Boolean' )
( 1.3.6.1.4.1.1466.115.121.1.12 DESC 'DN' )
( 1.3.6.1.4.1.1466.115.121.1.15 DESC 'Directory String' )
( 1.3.6.1.4.1.1466.115.121.1.24 DESC 'Generalized Time' )
( 1.3.6.1.4.1.1466.115.121.1.26 DESC 'IA5 String' )
( 1.3.6.1.4.1.1466.115.121.1.27 DESC 'INTEGER' )
( 1.3.6.1.4.1.1466.115.121.1.50 DESC 'Telephone Number' )
( 1.3.6.1.4.1.1466.115.121.1.53 DESC 'UTC Time' )
}
matchingRules {
( 2.5.13.2 NAME 'caseIgnoreMatch'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
( 2.5.13.0 NAME 'objectIdentifierMatch'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
( 2.5.13.30 NAME 'objectIdentifierFirstComponentMatch'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
( 2.5.13.4 NAME 'caseIgnoreSubstringsMatch'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )
}
schema信息可以通过API修改。
通过DN为“cn=schema”,你可以对一个属性的类型或者一个object class进行增加、删除和替换。
要删除一个schema实体,系统提供了oid in parenthesis (OID),并且可以用LDAPV3的定义或IBM属性扩展定义或其两者同时增加、替代目录入口。
OID是一个字符串,十进制数,唯一定义一个object。这些objects典型地就是一个object class
或者一个属性。这些数可以在IANA上得到。你可以通过-oid进行object class或属性的OID的指定。
subschema 入口
每个服务器都有一个subschema入口,所有目录的入口隐式的都有一个subschemaSubentry属性,这个属性的值是对应这个目录入口的 subschema 入口的DN。所有在同一服务器上的目录入口共享相同的subschema 入口,它们有相同的值。这个subschema 入口从属于’top’, ’subschema’, and ’IBMsubschema这几个object classes。