12.9. 创建自定义架构文件
模式文件是简单的 LDIF 文件,用于定义 cn=schema 条目。每个属性和对象类都作为属性添加到该条目。以下是创建模式文件的要求:
- 第一行必须是 dn: cn=schema。
- 模式文件可以同时包含属性和对象类,但它只能包括一个或多个属性。
- 如果属性和对象类都以样式定义,则必须首先列出所有属性,然后对象类。
- 对象类可以使用其他架构文件中定义的属性。
- 该文件的格式必须命名为 [1-9][0-9]text.ldif。该文件必须以两个数字开头。数字上,核心配置模式之前无法加载架构文件(以 00 和 01开头)。另外,Directory 服务器始终将其自定义模式写入 schema 目录中的数字和字母顺序,并按字母顺序排列。它要求此文件是
99user.ldif
。如果此文件不是99user.ldif
,则服务器可能会遇到问题。因此,请始终确保自定义架构文件至少小于99user.ldif
。名称99alpha.ldif
是 okay,名称99zzz.ldif
不是。
部署指南 中详细介绍了创建架构文件的实践。
属性在 schema 文件中定义为 schema 的
attributetypes
属性,其中五个组件:
- OID,通常是以点分开的数字
- 唯一名称,格式为 NAME name
- 描述,格式为 DESC 描述
- (可选)定义属性的源
例如:
attributetypes: ( 1.2.3.4.5.6.1 NAME 'dateofbirth' DESC 'For employee birthdays' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUED X-ORIGIN 'Example defined')
同样,对象类被定义为
对象类
属性的值,虽然定义对象类的方式略有更大的灵活性。唯一需要的配置是对象类的名称和 OID;所有其他配置都取决于对象类的需求:
- OID,通常是以点分开的数字
- 唯一名称,格式为 NAME name
- 描述,格式为 DESC 描述
- 此对象类的正式或父对象类,格式为 SUP object_class; 如果没有相关的父项,请使用 SUP top
- AUXILIARY 一词,它提供了对象类应用到的条目的类型; UXILILIARY 表示它可以应用到任何条目
- 在 MUST; 之前包括所需属性的列表,若要包含多个属性,用括号括起组,并使用带有符号($)的属性分隔。
- 允许的属性列表,前面带有 MAY; 以包含多个属性,用括号括起组,并使用符号($)分隔属性。
例如:
objectclasses: ( 2.16.840.1133730.2.123 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetOrgPerson AUXILIARY MUST cn MAY (exampleDateOfBirth $ examplePreferredOS) )
例 12.4 “Schema 文件示例” 显示简化的模式文件。
例 12.4. Schema 文件示例
dn: cn=schema attributetypes: ( 2.16.840.1133730.1.123 NAME 'dateofbirth' DESC 'For employee birthdays' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Example defined') objectclasses: ( 2.16.840.1133730.2.123 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetOrgPerson AUXILIARY MAY (dateofbirth) )
自定义架构文件应添加到目录服务器实例的 schema 目录中,即
/etc/dirsrv/slapd-instance/schema
。除非服务器重启或运行动态重新加载任务,否则这些文件中的 schema 不会加载并可供服务器使用。
重要
如果要使用
/usr/share/data/
目录中的标准模式,请将 schema 文件复制到 /usr/share/dirsrv/schema/
目录中。如果您要求标准模式仅对特定实例使用,请将架构文件复制到 /etc/dirsrv/slapd-instance_name/schema/
目录中,但使用目标目录中的不同文件名。否则,Directory 服务器在升级过程中重命名文件,并附加 .bak
后缀。