跳到主要内容

4. 目录模式

如 [X.501] 所定义:

  目录模式是一组定义和约束, 涉及 DIT 的结构, 条目可能的命名方式,
条目中可保存的信息, 用于表示这些信息的属性及其为便于搜索和检索
信息而构成的层次结构, 以及属性值在属性值断言和匹配规则断言中的
匹配方式.

注 1 - 例如, 模式使目录系统能够:

- 防止创建对象类错误的下级条目 (例如, 将国家/地区作为人员的
下级条目);

- 防止向条目添加不适合其对象类的属性类型 (例如, 向人员条目添加
序列号);

- 防止添加其语法与属性类型所定义语法不匹配的属性值 (例如, 向
位串添加可打印字符串).

从形式上讲, 目录模式由以下定义的集合组成:

a) 名称形式定义, 用于定义结构对象类的基本命名关系;

b) DIT 结构规则定义, 用于定义条目可以具有的名称, 以及条目在 DIT
中彼此关联的方式;

c) DIT 内容规则定义, 用于在条目的结构对象类所指明的范围之外,
扩展对条目允许使用的属性的规定;

d) 对象类定义, 用于定义给定类的条目中分别应存在和可以存在的
必需属性与可选属性基本集合, 并指明所定义的对象类种类;

e) 属性类型定义, 用于标识属性所对应的对象标识符, 其语法, 关联的
匹配规则, 它是否为操作属性及其操作属性类型, 它是否为集合属性,
是否允许具有多个值, 以及它是否派生自另一个属性类型;

f) 匹配规则定义, 用于定义匹配规则.

在 LDAP 中还包括:

g) LDAP 语法定义, 用于定义 LDAP 中使用的编码.

4.1. 模式定义​

本节中的模式定义使用 ABNF 描述, 并依赖第 1.2 节规定的公共产生式及 下列产生式:

  noidlen = numericoid [ LCURLY len RCURLY ]
len = number

oids = oid / ( LPAREN WSP oidlist WSP RPAREN )
oidlist = oid *( WSP DOLLAR WSP oid )

extensions = *( SP xstring SP qdstrings )
xstring = "X" HYPHEN 1*( ALPHA / HYPHEN / USCORE )

qdescrs = qdescr / ( LPAREN WSP qdescrlist WSP RPAREN )
qdescrlist = [ qdescr *( SP qdescr ) ]
qdescr = SQUOTE descr SQUOTE

qdstrings = qdstring / ( LPAREN WSP qdstringlist WSP RPAREN )
qdstringlist = [ qdstring *( SP qdstring ) ]
qdstring = SQUOTE dstring SQUOTE
dstring = 1*( QS / QQ / QUTF8 ) ; escaped UTF-8 string

QQ = ESC %x32 %x37 ; "\27"
QS = ESC %x35 ( %x43 / %x63 ) ; "\5C" / "\5c"

; Any UTF-8 encoded Unicode character
; except %x27 ("\'") and %x5C ("\")
QUTF8 = QUTF1 / UTFMB

; Any ASCII character except %x27 ("\'") and %x5C ("\")
QUTF1 = %x00-26 / %x28-5B / %x5D-7F

本节中的模式定义还共用若干通用术语.

NAME 字段提供一组短名称 (描述符), 用作 OID 的别名.

DESC 字段可选地允许目录管理员和/或实现者提供描述性字符串. 规范可以 建议使用某个描述性字符串, 但并不要求使用所建议的字符串 (或任何 描述性字符串).

OBSOLETE 字段如果存在, 表示该元素未处于活动状态.

实现者应注意, 本文档的未来版本可能会扩展这些定义以纳入其他术语. 标识符以 "X-" 开头的术语保留用于私有实验, 其后跟有 和 词法单元.

4.1.1. 对象类定义​

对象类定义按照下列 ABNF 编写:

 ObjectClassDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oids ] ; superior object classes
[ SP kind ] ; kind of class
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN

kind = "ABSTRACT" / "STRUCTURAL" / "AUXILIARY"

其中: 是分配给此对象类的对象标识符; NAME 是标识此对象类的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此对象类未处于活动状态; SUP 指定此对象类的直接超类; 对象类的种类由 ABSTRACT, STRUCTURAL 或 AUXILIARY 之一表示 (默认为 STRUCTURAL); MUST 和 MAY 分别指定必需和允许的属性类型集合; 以及 描述扩展.

4.1.2. 属性类型​

属性类型定义按照下列 ABNF 编写:

 AttributeTypeDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oid ] ; supertype
[ SP "EQUALITY" SP oid ] ; equality matching rule
[ SP "ORDERING" SP oid ] ; ordering matching rule
[ SP "SUBSTR" SP oid ] ; substrings matching rule
[ SP "SYNTAX" SP noidlen ] ; value syntax
[ SP "SINGLE-VALUE" ] ; single-value
[ SP "COLLECTIVE" ] ; collective
[ SP "NO-USER-MODIFICATION" ] ; not user modifiable
[ SP "USAGE" SP usage ] ; usage
extensions WSP RPAREN ; extensions

usage = "userApplications" / ; user
"directoryOperation" / ; directory operational
"distributedOperation" / ; DSA-shared operational
"dSAOperation" ; DSA-specific operational

其中: 是分配给此属性类型的对象标识符; NAME 是标识此属性类型的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此属性类型未处于活动状态; SUP oid 指定此类型的直接超类型; EQUALITY, ORDERING 和 SUBSTR 分别提供相等匹配规则, 排序匹配规则和 子串匹配规则的 oid; SYNTAX 通过对象标识符标识值语法, 并可以建议最小上限; SINGLE-VALUE 表示此类型的属性仅限单个值; COLLECTIVE 表示此属性类型是集合属性 [X.501][RFC3671]; NO-USER-MODIFICATION 表示此属性类型不可由用户修改; USAGE 表示此属性类型的用途; 以及 描述扩展.

每个属性类型描述必须至少包含 SUP 或 SYNTAX 字段之一. 如果未提供 SYNTAX 字段, 属性类型描述将从超类型取得其值.

如果提供了 SUP 字段, 则 EQUALITY, ORDERING 和 SUBSTRING 字段在未 指定时从超类型取得其值.

默认用途 userApplications 表示此类型的属性代表用户信息. 也就是说, 它们是用户属性.

用途 directoryOperation, distributedOperation 或 dSAOperation 表示 此类型的属性代表操作信息和/或管理信息. 也就是说, 它们是操作属性.

directoryOperation 用途表示此类型的属性是目录操作属性. distributedOperation 用途表示此类型的属性是 DSA 共享用途操作属性. dSAOperation 用途表示此类型的属性是 DSA 特定操作属性.

COLLECTIVE 要求用途为 userApplications.LDAP 中集合属性类型的使用 在 [RFC3671] 中讨论.

NO-USER-MODIFICATION 要求采用操作用途.

请注意, 并未列出可在 extensibleMatch 搜索 过滤器 [RFC4511] 中与该属性类型一起使用的匹配规则. 这通过第 4.1.4 节 所述的 'matchingRuleUse' 属性完成.

本文档细化了 X.501 的模式描述, 要求 中的 SYNTAX 字段是 LDAP 字符串语法定义之对象标识符的字符串表示, 并可选择 指明此属性值的建议最小上限.

对于基于字符串的语法, 可以建议值中字符数的最小上限; 对于所有其他语法, 可以建议值中字节数的最小上限. 指明方式是在属性类型描述中, 将该上限数值 置于花括号内, 并附加到相应语法的 OBJECT IDENTIFIER 之后. 该上限不属于 语法名称本身. 例如, "1.3.6.4.1.1466.0{64}" 表示建议服务器实现允许 字符串达到 64 个字符, 但也可以允许更长的字符串. 请注意, 由于 UTF-8 [RFC3629] 是一种变长编码, Directory String 语法中的单个字符可能编码为多个 八位位组.

4.1.3. 匹配规则​

匹配规则用于执行属性值断言, 例如执行 Compare 操作时. 它们还用于评估搜索 过滤器, 确定在执行 Modify 操作期间要添加或删除哪些单独值, 以及比较可分辨 名称.

每条匹配规则由对象标识符 (OID) 以及可选的一个或多个短名称 (描述符) 标识.

匹配规则定义按照下列 ABNF 编写:

 MatchingRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "SYNTAX" SP numericoid ; assertion syntax
extensions WSP RPAREN ; extensions

其中: 是分配给此匹配规则的对象标识符; NAME 是标识此匹配规则的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此匹配规则未处于活动状态; SYNTAX 通过对象标识符标识断言语法 (断言值的语法); 以及 描述扩展.

4.1.4. 匹配规则使用 (Matching Rule Uses)​

匹配规则使用列出适合与 extensibleMatch 搜索过滤器配合使用的属性类型.

匹配规则使用描述按照以下 ABNF 编写:

 MatchingRuleUseDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "APPLIES" SP oids ; attribute types
extensions WSP RPAREN ; extensions

其中: 是与此匹配规则使用描述关联的匹配规则的对象标识符; NAME 是标识此匹配规则使用的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此匹配规则使用不再有效; APPLIES 提供该匹配规则所适用的属性类型列表; 并且 描述扩展.

4.1.5. LDAP 语法​

(属性值和断言值的) LDAP 语法以 ASN.1 [X.680] 描述, 并且可以具有一种 称为 LDAP 特定编码的八位字节字符串编码. LDAP 特定编码通常限制为采用 UTF-8 [RFC3629] 形式的 Unicode [Unicode] 字符串.

每种 LDAP 语法均由一个对象标识符 (OID) 标识.

LDAP 语法定义按照以下 ABNF 编写:

 SyntaxDescription = LPAREN WSP
numericoid ; object identifier
[ SP "DESC" SP qdstring ] ; description
extensions WSP RPAREN ; extensions

其中: 是分配给此 LDAP 语法的对象标识符; DESC 是简短的描述性字符串; 并且 描述扩展.

4.1.6. DIT 内容规则​

DIT 内容规则是"管辖特定结构对象类条目内容的规则" [X.501].

对于特定结构对象类的 DIT 条目, DIT 内容规则规定条目可以属于哪些辅助 对象类, 以及条目中必须出现, 允许出现或禁止出现哪些额外属性 (按类型).

被排除属性的列表不能包含该规则, 结构对象类或任何允许的辅助对象类中 列为强制的任何属性.

每个内容规则均由其所适用结构对象类的对象标识符以及任何短名称 (描述符) 标识.

条目只能属于管辖它的内容规则中列出的辅助对象类.

条目必须包含其所属对象类要求的所有属性, 还必须包含管辖它的内容规则 要求的所有属性.

条目可以包含其所属对象类允许的任何未被排除的属性, 还可以包含管辖它的 内容规则允许的所有属性.

条目不能包含管辖它的内容规则所排除的任何属性.

条目受适用于其结构对象类的 DIT 内容规则管辖 (如果该规则存在且在子模式 中有效, 见第 2.4.2 节). 如果该条目的结构对象类没有有效规则, 则其内容 由该结构对象类 (以及用户模式和系统模式的其他方面) 管辖. 条目结构对象类 的超类所对应的 DIT 内容规则不适用于该条目.

DIT 内容规则描述按照以下 ABNF 编写:

 DITContentRuleDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "AUX" SP oids ] ; auxiliary object classes
[ SP "MUST" SP oids ] ; attribute types
[ SP "MAY" SP oids ] ; attribute types
[ SP "NOT" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions

其中: 是与此 DIT 内容规则关联的结构对象类的对象标识符; NAME 是标识此 DIT 内容规则的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此 DIT 内容规则使用不再有效; AUX 指定受此 DIT 内容规则约束的条目可以所属的辅助对象类列表;

 MUST, MAY 和 NOT 分别指定受此 DIT 内容规则约束的条目中要求出现,
允许出现或禁止出现的属性类型列表; 并且
<extensions> 描述扩展.

4.1.7. DIT 结构规则和名称形式​

有时需要根据对象条目和别名条目的结构对象类, 约束它们可以置于 DIT 中 的哪些位置以及如何命名.

4.1.7.1. DIT 结构规则​

DIT 结构规则是"通过规定允许的上级条目与下级条目关系来管辖 DIT 结构的 规则. 结构规则将名称形式以及相应的结构对象类与上级结构规则相关联. 这使名称形式所标识的结构对象类条目可以作为由指定上级结构规则管辖的 条目的下级而存在于 DIT 中" [X.501].

DIT 结构规则描述按照以下 ABNF 编写:

 DITStructureRuleDescription = LPAREN WSP
ruleid ; rule identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "FORM" SP oid ; NameForm
[ SP "SUP" ruleids ] ; superior rules
extensions WSP RPAREN ; extensions

ruleids = ruleid / ( LPAREN WSP ruleidlist WSP RPAREN )
ruleidlist = ruleid *( SP ruleid )
ruleid = number

其中: 是此 DIT 结构规则的规则标识符; NAME 是标识此 DIT 结构规则的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此 DIT 结构规则使用不再有效; FORM 指定与此 DIT 结构规则关联的名称形式; SUP (通过规则 ID) 标识上级规则; 并且 描述扩展.

如果未标识上级规则, 则 DIT 结构规则适用于自治管理点 (例如, 由子模式 控制的子树的根顶点) [X.501].

4.1.7.2. 名称形式​

名称形式"规定特定结构对象类条目所允许的 RDN. 名称形式标识命名对象类 以及用于命名 (即用于 RDN) 的一个或多个属性类型. 名称形式是定义 DIT 结构规则时使用的基本规范构件" [X.501].

每个名称形式指明要命名的结构对象类, 一组必需属性类型和一组允许的属性 类型. 任一特定属性类型不能同时属于这两个集合.

受该形式管辖的条目必须使用每个必需属性类型中的一个值, 以及允许属性 类型中的零个或多个值来命名.

每个名称形式均由一个对象标识符 (OID) 标识, 还可以由一个或多个短名称 (描述符) 标识.

名称形式描述按照以下 ABNF 编写:

 NameFormDescription = LPAREN WSP
numericoid ; object identifier
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
SP "OC" SP oid ; structural object class
SP "MUST" SP oids ; attribute types
[ SP "MAY" SP oids ] ; attribute types
extensions WSP RPAREN ; extensions

其中: 是标识此名称形式的对象标识符; NAME 是标识此名称形式的短名称 (描述符); DESC 是简短的描述性字符串; OBSOLETE 表示此名称形式不再有效; OC 标识此规则所适用的结构对象类, MUST 和 MAY 分别指定此名称形式所要求和允许的命名属性集合; 并且 描述扩展.

必需列表 ("MUST") 和允许列表 ("MAY") 中的所有属性类型应各不相同.

4.2. 子模式子条目 (Subschema Subentries)​

子模式子条目用于管理目录模式的相关信息. 一个子模式子条目包含 目录树特定部分中的条目所使用的全部模式定义 (见第 4.1 节).

遵循 X.500(93) 模型的服务器应当 (SHOULD) 使用 X.500 子模式机制 (详见 [X.501] 第 12 节) 实现子模式, 因而这些条目不是普通对象条目, 而是子条目 (见第 3.2 节). LDAP 客户端不应当 (SHOULD NOT) 假定服务器实现了 X.500 子模式的任何其他方面.

服务器可以 (MAY) 允许修改子模式. [X.501] 第 14.5 节讨论了修改子模式 的过程.

对条目拥有主控权且允许客户端修改这些条目的服务器必须 (SHALL) 实现并 提供对这些子模式子条目的访问, 包括在每个可修改条目中提供一个 'subschemaSubentry' 属性. 这样, 客户端就可以发现允许存在的属性和对象类. 强烈推荐 (RECOMMENDED) 所有其他服务器也实现此功能.

'subschemaSubentry' 属性的值是保存控制该条目的子模式的子模式子条目 的名称.

  ( 2.5.18.10 NAME 'subschemaSubentry'
EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
SINGLE-VALUE NO-USER-MODIFICATION
USAGE directoryOperation )

'distinguishedNameMatch' 匹配规则和 DistinguishedName (1.3.6.1.4.1.1466.115.121.1.12) 语法在 [RFC4517] 中定义.

子模式保存在属于 subschema 辅助对象类的 (子)条目中.

  ( 2.5.20.1 NAME 'subschema' AUXILIARY
MAY ( dITStructureRules $ nameForms $ ditContentRules $
objectClasses $ attributeTypes $ matchingRules $
matchingRuleUse ) )

子模式子条目中还可以存在 'ldapSyntaxes' 操作属性.

服务器可以 (MAY) 在子模式子条目中提供 (其他文档所描述的) 附加属性.

服务器应当 (SHOULD) 在子模式子条目中提供 'createTimestamp' 和 'modifyTimestamp' 属性, 以便客户端维护其模式信息缓存.

以下各小节提供每种模式定义属性类型的属性类型定义.

4.2.1. 'objectClasses'​

此属性保存对象类的定义.

  ( 2.5.21.6 NAME 'objectClasses'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.37
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 ObjectClassDescription (1.3.6.1.4.1.1466.115.121.1.37) 语法在 [RFC4517] 中定义.

4.2.2. 'attributeTypes'​

此属性保存属性类型的定义.

  ( 2.5.21.5 NAME 'attributeTypes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 AttributeTypeDescription (1.3.6.1.4.1.1466.115.121.1.3) 语法在 [RFC4517] 中定义.

4.2.3. 'matchingRules'​

此属性保存匹配规则的定义.

  ( 2.5.21.4 NAME 'matchingRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.30
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 MatchingRuleDescription (1.3.6.1.4.1.1466.115.121.1.30) 语法在 [RFC4517] 中定义.

4.2.4 'matchingRuleUse'

此属性保存匹配规则使用的定义.

  ( 2.5.21.8 NAME 'matchingRuleUse'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.31
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 MatchingRuleUseDescription (1.3.6.1.4.1.1466.115.121.1.31) 语法在 [RFC4517] 中定义.

4.2.5. 'ldapSyntaxes'​

此属性保存 LDAP 语法的定义.

  ( 1.3.6.1.4.1.1466.101.120.16 NAME 'ldapSyntaxes'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.54
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 SyntaxDescription (1.3.6.1.4.1.1466.115.121.1.54) 语法在 [RFC4517] 中定义.

4.2.6. 'dITContentRules'​

此属性列出子模式中存在的 DIT 内容规则.

  ( 2.5.21.2 NAME 'dITContentRules'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.16
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 DITContentRuleDescription (1.3.6.1.4.1.1466.115.121.1.16) 语法在 [RFC4517] 中定义.

4.2.7. 'dITStructureRules'​

此属性列出子模式中存在的 DIT 结构规则.

  ( 2.5.21.1 NAME 'dITStructureRules'
EQUALITY integerFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.17
USAGE directoryOperation )

'integerFirstComponentMatch' 匹配规则和 DITStructureRuleDescription (1.3.6.1.4.1.1466.115.121.1.17) 语法在 [RFC4517] 中定义.

4.2.8 'nameForms'

此属性列出当前生效的名称形式.

  ( 2.5.21.7 NAME 'nameForms'
EQUALITY objectIdentifierFirstComponentMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.35
USAGE directoryOperation )

'objectIdentifierFirstComponentMatch' 匹配规则和 NameFormDescription (1.3.6.1.4.1.1466.115.121.1.35) 语法在 [RFC4517] 中定义.

4.3. 'extensibleObject' 对象类​

'extensibleObject' 辅助对象类允许属于该类的条目保存任何用户属性. 该 对象类的允许属性类型集合隐式地等于所有用途为 userApplications 的属性 类型集合.

  ( 1.3.6.1.4.1.1466.101.120.111 NAME 'extensibleObject'
SUP top AUXILIARY )

此条目其他对象类的必需属性仍要求存在, 任何被排除的属性仍不允许存在.

4.4. 子模式发现​

为发现保存着控制某个特定条目的子模式的子模式子条目 DN, 客户端读取 该条目的 'subschemaSubentry' 操作属性. 为从子模式子条目读取模式属性, 客户端 MUST 发出 Search 操作 [RFC4511], 其中 baseObject 是子模式子条目 的 DN, scope 为 baseObject, filter 为 "(objectClass=subschema)" [RFC4515], attributes 字段列出所需模式属性的名称 (因为它们是操作属性). 注: "(objectClass=subschema)" 过滤器使充当 X.500 网关的 LDAP 服务器能够检测 到请求的是子条目信息.

客户端 SHOULD NOT 假定已发布的子模式是完整的, 服务器支持其发布的所有 模式元素, 或服务器不支持未发布的元素.