7.5. 手动创建自定义模式文件
您可以通过扩展架构将自定义属性和对象类添加到 Directory Server。您可以扩展模式:
- 通过创建模式文件手动进行。此过程在本节中进行了描述。
- 在命令行中使用 dsconf 工具。
- 使用 Directory Server Web 控制台。
7.5.1. 模式文件的要求 复制链接链接已复制到粘贴板!
模式文件使用定义 cn=schema 条目的 LDIF 格式。每个属性类型和对象类添加到此条目中。
以下是模式文件的要求:
该文件必须以以下条目开头:
dn: cn=schema
dn: cn=schemaCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 架构文件可以包含属性类型或对象类或这两个类。
- 对象类定义可以使用其他架构文件中定义的属性。
根据哪些实例应该使用自定义模式文件,将其存储在以下位置之一:
-
/etc/dirsrv/slapd-<instance_name> /schema/,使 schema 文件可供这个特定实例使用 -
/usr/share/dirsrv/schema/,使 schema 文件可供此主机上运行的所有实例使用
-
默认情况下,Directory 服务器需要
99user.ldif文件中的自定义模式。如果您使用不同的文件名:-
名称必须按字母顺序低于
99user.ldif。例如,99aaa.ldif是 ok,但99zzz.ldif不是。 名称必须以两位数字开头,且高于
01,因为自定义模式文件必须在核心模式文件后加载,该文件必须以00开头,最多为98目录服务器按字母顺序读取模式文件。因此,如果您存储了定义
99user.ldif,它将覆盖名称以00和01开头的标准文件中的定义。
-
名称必须按字母顺序低于
-
如果要使用
/usr/share/dirsrv/data/目录中的标准模式文件,请将文件复制到 /etc/dirsrv/slapd- <instance_name>/schema/或/usr/share/dirsrv/schema/,具体取决于哪些实例应使用该文件。但是,在目标目录中使用不同的文件名。否则,Directory 服务器在升级过程中重命名文件,并附加.bak后缀。
例 7.2. 自定义架构文件示例
dn: cn=schema objectClasses: ( 2.16.840.1.1133730.2.1.123 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' ) attributeTypes: ( 2.16.840.1.1133730.2.1.99 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
dn: cn=schema
objectClasses: ( 2.16.840.1.1133730.2.1.123 NAME 'exampleperson' DESC 'An example
person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.99 NAME 'dateOfBirth' DESC 'For employee
birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
7.5.2. 自定义模式文件中的属性定义 复制链接链接已复制到粘贴板!
您可以将模式文件中的属性定义为 attributeTypes 属性的值。
例 7.3. 定义属性
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
属性定义包含以下组件:
- 指定为点分开的数字的唯一对象标识符(OID)。
-
唯一名称,格式为
NAME attribute_name。 -
以
DESC 形式的 描述。 -
OID 的属性值语法,格式为
SYNTAX OID。有关 LDAP 属性语法的详情,请参阅 RFC 4517。 - 可选:定义属性的源。
7.5.3. 自定义 schema 文件中的对象类定义 复制链接链接已复制到粘贴板!
您可以将架构文件中的对象类定义为 swig es 属性的值。
例 7.4. 对象类的定义
objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
对象类定义包含以下组件:
- 指定为点分开的数字的唯一对象标识符(OID)。
-
唯一名称,格式为
NAME attribute_name。 -
以
DESC 形式的 描述。 -
此对象类的卓越的(父)对象类,格式为
SUP object_class。如果没有相关的父项,请使用SUP 顶部。 -
STRUCTURAL定义了对象类应用到的条目类型。任何条目必须至少属于一个STRUCTURAL对象类。AUXILIARY表示它可以应用到任何条目。 -
需要的属性列表,以
MUST关键字开头。要包括多个属性,请将组放在括号中,并使用 '$ '(dollar 符号和空格)分隔属性。 -
可选属性的列表,前面带有
MAY关键字。要包括多个属性,请将组放在括号中,并使用 '$ '(dollar 符号和空格)分隔属性。
只有 name 和 OID 是必需的,其他设置取决于对象类的需求。
7.5.4. 为属性和对象类手动创建自定义模式文件 复制链接链接已复制到粘贴板!
如果要手动创建自定义模式,将其存储在 /etc/dirsrv/slapd- <instance_name> /schema/99user.ldif 文件中。可以使用其他文件名,但会导致缺点,如存储在其他文件中的 schema 定义,然后存储在副本的 /etc/dirsrv/slapd- <instance_name>/schema/99user.ldif 中。请参阅 目录服务器如何在复制环境中管理模式更新。
这个过程添加:
-
名为
dateOfBirth的单值属性,其 OID2.16.840.1.1133730.2.1.123和语法Directory String(OID1.3.6.1.4.1.1466.115.121.1.15) -
名为
exampleperson的对象类没有父对象类(SUP top),它必须包含dateOfBirth属性。
流程
在
/etc/dirsrv/slapd-<instance_name>/schema/99user.ldif 文件中的条目下添加以下内容:dn: cn=schemaattributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' ) objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )
attributeTypes: ( 2.16.840.1.1133730.2.1.123 NAME 'dateOfBirth' DESC 'For employee birthday' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' ) objectClasses: ( 2.16.840.1.1133730.2.1.99 NAME 'exampleperson' DESC 'An example person object class' SUP top STRUCTURAL MUST dateOfBirth X-ORIGIN 'user defined' )Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 schema reload 任务:
dsconf <instance_name> schema reload
# dsconf <instance_name> schema reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤:
监控
/var/log/dirsrv/slapd- <instance_name> /errors文件:如果构建成功,Directory 服务器日志:
[23/Sep/2021:13:47:33.334241406 +0200] - INFO - schemareload - schemareload_thread - Schema reload task starts (schema dir: default) ... [23/Sep/2021:13:47:33.415692558 +0200] - INFO - schemareload - schemareload_thread - Schema validation passed. [23/Sep/2021:13:47:33.454768148 +0200] - INFO - schemareload - schemareload_thread - Schema reload task finished.
[23/Sep/2021:13:47:33.334241406 +0200] - INFO - schemareload - schemareload_thread - Schema reload task starts (schema dir: default) ... [23/Sep/2021:13:47:33.415692558 +0200] - INFO - schemareload - schemareload_thread - Schema validation passed. [23/Sep/2021:13:47:33.454768148 +0200] - INFO - schemareload - schemareload_thread - Schema reload task finished.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果构建失败,Directory 服务器会记录哪个步骤失败和原因。