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')
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')
同样,对象类被定义为
objectclasses
属性的值,虽然定义对象类的方式稍有更大的灵活性。唯一需要的配置是对象类的名称和 OID;所有其他配置都取决于对象类的要求:
- OID,通常是以点分开的数字
- 唯一名称,格式为 NAME name
- 描述,格式为 DESC 描述
- 此对象类的 superior 或 parent 对象类,格式为 SUP object_class ;如果没有相关的父对象,请使用 SUP 顶部。
- AUXILIARY 一词提供对象类应用到的条目类型; AUXILIARY 表示它可以应用到任何条目
- 必要属性的列表,前面带有单词 MUST; 包括多个属性,将组用括号括起,用美元符号($)分隔属性。
- 允许的属性列表,前面带有 MAY 一词;要包含多个属性,将组用括号括起,并且使用 $ 符号($)分隔属性。
例如:
objectclasses: ( 2.16.840.1133730.2.123 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetOrgPerson AUXILIARY MUST cn MAY (exampleDateOfBirth $ examplePreferredOS) )
objectclasses: ( 2.16.840.1133730.2.123 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetOrgPerson AUXILIARY MUST cn MAY (exampleDateOfBirth $ examplePreferredOS) )
例 12.4 “架构文件示例” 显示简化的模式文件。
例 12.4. 架构文件示例
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) )
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) )
自定义架构文件应添加到 Directory Server 实例的 schema 目录中,
/etc/dirsrv/slapd-instance/schema
。除非服务器重启或动态重新加载任务运行,否则这些文件中的 schema 不会被加载且可供服务器使用。
重要
如果要使用
/usr/share/data/
目录中的标准模式,请将 schema 文件复制到 /usr/share/dirsrv/schema/
目录中。如果您需要标准模式仅适用于特定实例,请将 schema 文件复制到 /etc/dirsrv/slapd-instance_name/schema/
目录中,但在目标目录中使用不同的文件名。否则,Directory 服务器在升级过程中重命名文件,并附加 .bak
后缀。