7.5. 手动创建自定义模式文件


您可以通过扩展架构将自定义属性和对象类添加到 Directory Server。您可以扩展模式:

7.5.1. 模式文件的要求

模式文件使用定义 cn=schema 条目的 LDIF 格式。每个属性类型和对象类添加到此条目中。

以下是模式文件的要求:

  • 该文件必须以以下条目开头:

    dn: cn=schema
    Copy to Clipboard Toggle word wrap
  • 架构文件可以包含属性类型或对象类或这两个类。
  • 对象类定义可以使用其他架构文件中定义的属性。
  • 根据哪些实例应该使用自定义模式文件,将其存储在以下位置之一:

    • /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,它将覆盖名称以 0001 开头的标准文件中的定义。

  • 如果要使用 /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' )
Copy to Clipboard Toggle word wrap

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' )
Copy to Clipboard Toggle word wrap

属性定义包含以下组件:

  • 指定为点分开的数字的唯一对象标识符(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' )
Copy to Clipboard Toggle word wrap

对象类定义包含以下组件:

  • 指定为点分开的数字的唯一对象标识符(OID)。
  • 唯一名称,格式为 NAME attribute_name
  • DESC 形式的 描述
  • 此对象类的卓越的(父)对象类,格式为 SUP object_class。如果没有相关的父项,请使用 SUP 顶部
  • STRUCTURAL 定义了对象类应用到的条目类型。任何条目必须至少属于一个 STRUCTURAL 对象类。AUXILIARY 表示它可以应用到任何条目。
  • 需要的属性列表,以 MUST 关键字开头。要包括多个属性,请将组放在括号中,并使用 '$ '(dollar 符号和空格)分隔属性。
  • 可选属性的列表,前面带有 MAY 关键字。要包括多个属性,请将组放在括号中,并使用 '$ '(dollar 符号和空格)分隔属性。

只有 name 和 OID 是必需的,其他设置取决于对象类的需求。

如果要手动创建自定义模式,将其存储在 /etc/dirsrv/slapd- <instance_name&gt; /schema/99user.ldif 文件中。可以使用其他文件名,但会导致缺点,如存储在其他文件中的 schema 定义,然后存储在副本的 /etc/dirsrv/slapd- <instance_name>/schema/99user.ldif 中。请参阅 目录服务器如何在复制环境中管理模式更新

这个过程添加:

  • 名为 dateOfBirth 的单值属性,其 OID 2.16.840.1.1133730.2.1.123 和语法 Directory String (OID 1.3.6.1.4.1.1466.115.121.1.15)
  • 名为 exampleperson 的对象类没有父对象类(SUP top),它必须包含 dateOfBirth 属性。

流程

  1. /etc/dirsrv/slapd-<instance_name>/schema/99user.ldif 文件中的 dn: cn=schema 条目下添加以下内容:

    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 Toggle word wrap
  2. 运行 schema reload 任务:

    # dsconf <instance_name> schema reload
    Copy to Clipboard Toggle word wrap

验证步骤:

  • 监控 /var/log/dirsrv/slapd- <instance_name&gt; /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.
      Copy to Clipboard Toggle word wrap
    • 如果构建失败,Directory 服务器会记录哪个步骤失败和原因。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat