向模式中添加新属性时,必须创建新对象类以包含这些新属性。可以直接将属性添加到已包含您所需要的大多数属性的现有对象类中,这种方法看起来比较方便,但却会影响与 LDAP 客户端之间的互操作性。
目录服务器与现有 LDAP 客户端之间的互操作性依赖于标准 LDAP 模式。如果更改标准模式,您在升级服务器时也会遇到困难。同理,您也不能删除标准模式元素。
目录服务器模式存储在 cn=schema 条目的属性中。与配置条目一样,此条目也是模式的 LDAP 视图,在服务器启动期间将从文件中读取此视图。
用于扩展目录服务器模式的方法取决于您是否要控制存储模式扩展时所使用的文件名。此外,还取决于您是否要通过复制将更改发送给使用方。请参见下表,以便根据您的具体情况确定要执行的过程。
表 12–1 扩展模式的方法
任务 |
说明 |
---|---|
您不使用复制。您打算通过添加自定义模式文件扩展模式。 | |
您打算通过 LDAP 扩展模式。 | |
您使用复制。您打算在所有服务器上保留自定义模式文件的文件名。 | |
您使用复制。您打算通过在主副本上添加自定义模式文件来扩展模式。然后通过复制机制将模式扩展复制到使用方服务器。 |
有关对象类、属性和目录模式的详细信息以及扩展模式所应遵循的准则,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Deployment Planning Guide》中的“Designing a Directory Schema”。有关标准属性和对象类的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Man Page Reference》。
本部分提供扩展目录模式时可使用的各种方法的相关信息。
模式文件是位于 instance-path/config/schema/ 中的 LDIF 文件。instance-path 与目录服务器实例所在的文件系统目录相对应。例如,此实例可能位于 /local/ds/ 中。这些文件可定义供目录服务器以及依赖于目录服务器的所有服务器使用的标准模式。 《Sun Java System Directory Server Enterprise Edition 6.3 Reference》和《Sun Java System Directory Server Enterprise Edition 6.3 Man Page Reference》中介绍了这些文件和标准模式。
服务器只在启动时读取模式文件一次。这些 LDIF 文件的内容将被添加到 cn=schema 中模式的内存 LDIF 视图。由于模式定义的顺序非常重要,因此模式文件名称都以数字开头,并按字母数字顺序装入。只有在安装期间定义的系统用户才能对此目录中的模式文件执行写入操作。
在 LDIF 文件中直接定义模式时,不要在 X-ORIGIN 字段中使用 'user defined' 值。此值是为特定的模式元素保留的,这些元素通过 cn=schema 的 LDAP 视图进行定义,并出现在 99user.ldif 文件中。
99user.ldif 文件包含其他 ACI,用于 cn=schema 条目和所有已从命令行或使用 DSCC 添加的模式定义。添加新的模式定义时,将覆盖 99user.ldif 文件。如果要修改此文件,则必须立即重新启动服务器,以确保更改是最新的。
不要修改在其他模式文件中定义的标准模式。但是,您可以添加新文件,以定义新的属性和对象类。例如,要在许多服务器中定义新的模式元素,则可以在名为 98mySchema.ldif 的文件中定义这些元素,并将此文件复制到所有服务器上的模式目录中。然后,应重新启动所有服务器以装入新的模式文件。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
创建您自己的模式定义文件,如 98mySchema.ldif。
RFC 4517 中介绍了模式文件中的定义所使用的语法。
(可选的)如果此服务器是将更新发送到其他服务器的主副本,请将您的模式定义文件复制到复制拓扑中的每个服务器实例中。
复制机制无法检测到您直接对包含模式的 LDIF 文件所做的任何更改。因此,即使在重新启动主服务器之后,您的更改也不会复制到使用方。
重新启动将模式定义文件复制到的每个目录服务器实例。
当服务器重新启动并重新装入模式定义时,您的更改将会生效。
由于模式是由 LDAP 视图在 cn=schema 中定义的,因此您可以使用 ldapsearch 和 ldapmodify 实用程序联机查看和修改模式。但是,您只能修改 X-ORIGIN 字段值为 'user defined' 的模式元素。服务器将拒绝对其他定义所做的任何修改。
新的元素定义以及您对用户定义元素所做的更改都保存在 99user.ldif 文件中。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
从命令行修改模式定义容易出错,因为必须准确键入较长的值。但是,您可以在需要更新目录模式的脚本中使用此功能。
使用 ldapmodify(1) 命令添加或删除单个的 attributeTypes 属性值。
使用 ldapmodify(1) 命令添加或删除单个的 objectClasses 属性值。
要修改其中某个值,您必须先删除特定的值,然后将此值作为新值进行添加。由于属性为多值属性,因此必须执行此过程。有关详细信息,请参见修改多值属性的一个值。
有关自定义模式文件的信息,请参见使用自定义模式文件扩展模式。以下过程介绍如何使用复制机制将模式扩展传播到拓扑中的所有服务器。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
使用以下任一方法准备您的模式扩展:
RFC 4517 中介绍了模式文件中的定义所使用的语法。
在放置模式定义文件的主服务器上运行 schema_push 命令。
此脚本不会实际将模式发送到副本,而是将特殊属性写入模式文件,以使这些模式文件在装入后立即被复制。有关详细信息,请参见 schema_push(1M) 手册页。
重新启动放置模式定义文件的主服务器。
复制机制无法检测到您直接对包含模式的 LDIF 文件所做的任何更改。但是,在运行 schema_push 后重新启动服务器时,该服务器将装入所有模式文件,然后复制机制会将新的模式复制到使用方。