Sun ONE Directory Server 管理指南 |
Sun ONE Directory Server 具有标准模式,该模式包括数百个对象类和属性。虽然标准对象类和属性应该能够满足您的大多数要求,但可能还需要创建新对象类和属性以扩展模式。
本章在以下小节中介绍如何扩展模式:
模式检查
当模式检查处于打开状态时,Directory Server 可确保所有的导入、添加和修改操作符合当前定义的目录模式:
- 每个条目的对象类和属性都符合模式。
- 条目包含其所有已定义对象类的全部必需的属性。
- 条目仅包含其对象类允许的属性。
注意 修改条目时,Directory Server 对整个条目执行模式检查,而不仅仅是对正被修改的属性进行检查。因此,如果条目中任何对象类或属性不符合模式要求,则操作可能会失败。
Directory Server 中,模式检查默认情况下为打开状态。运行 Directory Server 时,模式检查始终应为打开状态。许多客户机应用程序认为模式检查为打开状态表示所有条目都符合模式。
不过,打开模式检查并不会验证目录中的现有内容。要保证所有目录内容符合模式的唯一办法就是在添加任意条目或重新初始化所有条目之前打开模式检查。
唯一的例外情况是加速已知符合模式的 LDIF 文件的导入操作,此时模式检查可能要关闭。不过,始终存在导入不符合模式的条目的风险,并且检测不到此风险。
当某个条目不符合模式时,将无法搜索到此条目,并且修改此条目的操作也将失败。要使条目符合模式,必须执行以下操作:
- 如果服务器处于生产环境,您可能希望首先将整个服务器置于只读状态,以防止模式检查为关闭状态时对其进行任何修改。请参阅“设置全局只读模式”(第 34 页)。
- 请按照下面的步骤关闭模式检查。
- 检索条目并手动将此条目与当前定义的模式进行比较,以确定条目不符合模式的原因。请参阅“查看属性” 和“查看对象类”。
- 修改条目以使其符合模式。
如果有多个不符合模式的条目,并且这些条目代表了数据的一种模式或新格式,则应改为考虑修改模式。不过,应该在部署前计划模式以尽量减少对模式的更改。详细信息,请参阅 Sun ONE Directory Server 部署指南中第 3 章“设计模式”。
- 请按照下面的步骤打开模式检查。
- 如果已启用全局只读模式,请取消设置。
使用控制台设置模式检查
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的模式节点。
右侧面板包含了模式的定义。
- 面板顶部的状态消息指示当前模式检查处于启用还是禁用状态。单击右侧的按钮以切换模式检查的关闭或打开状态:
- 该按钮被标为“禁用”以关闭模式检查。
- 当可以打开模式检查时,该按钮将标为“启用”。
新的模式检查策略将立即有效。
从命令行设置模式检查
还可以通过设置 cn=config 条目的 nsslapd-schemacheck 属性来打开和关闭模式检查:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:cn=config
changetype:modify
replace:nsslapd-schemacheck
nsslapd-schemacheck:on 或 off服务器将立即实施新模式检查策略。
扩展模式概述
向模式添加新属性时,必须创建新对象类以包含这些属性。虽然仅向现有的对象类(已包含所需的大多数属性)添加所需的属性看起来很方便,但这样操作会损坏与 LDAP 客户机的互用性。
Directory Server 与现有 LDAP 客户机的互用性依赖于标准 LDAP 模式。如果更改标准模式,升级服务器时同样会出现困难。基于同样的理由,不能删除标准模式元素。
有关对象类、属性和目录模式的详细信息,以及扩展模式的指导说明,请参阅 Sun ONE Directory Server 部署指南中的第 3 章“设计模式”。有关标准属性和对象类的信息,请参阅 Sun ONE Directory Server 参考手册中的第 4 部分“Directory Server 模式”。
Directory Server 模式存储于目录的 cn=schema 条目的属性中。与配置条目相似,这是服务器启动期间从文件读取的模式的 LDAP 视图。模式文件是 LDIF 文件,位于:
ServerRoot/slapd-serverID/config/schema
此目录包含 Directory Server 和其他依赖 Directory Server 的 Sun ONE 服务器所使用的标准模式的文件。Sun ONE Directory Server 参考手册中的第 9 章“Directory Server 5.2 所支持的模式”对这些文件进行了说明。Sun ONE Directory Server 参考手册中第 10 章“对象类参考”和第 11 章“属性参考”对标准模式进行了说明。
修改模式文件
模式文件只能在启动时由服务器读取一次。文件的 LDIF 内容将被添加至 cn=schema 中模式的内存 LDAP 视图。因为模式定义的顺序非常重要,因此模式文件名是以数字作为前缀,并按字母数字顺序加载。只有安装期间定义的系统用户才可以向目录中的模式文件写入。
要修改文件中的模式定义,必须创建或修改希望的文件,然后重新启动服务器。RFC 2252 (http://www.ietf.org/rfc/rfc2252.txt) 对模式文件中的语法定义进行了说明。
在 LDIF 文件中直接定义模式时,一定不要使用 X-ORIGIN 字段的值 User defined。此值是为通过 cn=schema 的 LDAP 视图定义且出现在 99user.ldif 中的模式元素所保留。
文件 99user.ldif 包含 cn=schema 条目的附加 ACI,以及从命令行或使用控制台添加的所有模式定义。添加新的模式定义时,文件 99user.ldif 将被改写。如果要修改此文件,必须立即重新启动服务器以确保所做更改具有永久性。
不应该修改在其他模式文件中定义的标准模式。不过,可以添加新文件以定义新的属性和对象类。例如,要在多台服务器中定义新模式元素,应该在一个名为 98mySchema.ldif 的文件中定义这些模式元素,并将此文件复制到所有服务器的模式目录。然后,必须重新启动所有服务器以加载新的模式文件。
从命令行修改模式
因为模式是由 cn=schema 中的 LDAP 视图定义的,所以可以使用 ldapsearch 和 ldapmodify 公用程序联机查看和修改模式。不过,只能修改 X-ORIGIN 字段的值为 User defined 的模式元素。服务器将拒绝修改其他定义。
使用 ldapmodify 可以添加和删除 attributeTypes 和 objectClasses 属性的单个值。要修改其中一个值,必须删除该值,然后将其作为新值添加,因为这些属性为多值(请参阅“修改多值属性的值”(第 64 页)。)必须使用 RFC 2252 (http://www.ietf.org/rfc/rfc2252.txt) 中说明的语法来定义模式元素。
任何新元素定义及对用户定义元素的更改都将保存在 99user.ldif 文件中。
从命令行修改模式定义很容易出错,因为需要您准确地输入位数多的长值。不过,在需要更新目录模式的脚本中可能会用到此功能。
使用控制台修改模式
定制目录模式的建议方法是使用以下几节中说明的 Directory Server 控制台界面。控制台允许您查看标准模式,并提供一个图形界面,用于定义新的属性和对象类以及编辑已定义的元素。
再重复一遍,任何新元素定义及对用户定义元素的更改都将保存在 99user.ldif 文件中。
要扩展目录模式,应该按以下顺序执行操作:
管理属性定义
Directory Server 控制台提供一个界面,以查看模式中的所有属性,并可以创建、编辑和删除您自身的属性定义。
查看属性
要查看有关目录模式中当前存在的所有属性的信息,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“属性”标签。
该标签包含各种表格,这些表格列出模式中的所有标准(只读)属性和用户定义的属性。将鼠标放到表格的某一行,将显示相应属性的说明字符串。
以下表格说明属性表格的字段。
表 9-1    “属性”标签中的表格列
列标题
说明
名称
属性的名称(有时称为类型)。
OID
属性的对象标识符。OID 是一个字符串(通常由带点的十进制数构成),它唯一标识模式对象。
有关 OID 的详细信息,或者想为企业申请前缀,请向 IANA(Internet 分配号码机构)发邮件,
地址是 iana@iana.org;也可访问 IANA 网站 http://www.iana.org/。语法
语法说明允许的属性值格式,可能的语法已列在表 9-2 中。
多值
此列中的复选框指定属性是否为多值。多值属性可在条目中出现任意次,但单值属性可能仅出现一次。
表 9-2    属性语法定义
语法名称
定义
二进制(以前的 bin)
表明该属性的值被视作二进制数据。
布尔型
表明该属性仅拥有两个值中的一个:True 或 False。
国家(地区)字符串
表明该属性的值限制为两个字母的国家(地区)代码(由 ISO 3166 指定),例如 FR。
DN(以前的 dn)
表明该属性的值是 DN(标识名称)。
DirectoryString
(以前的 cis)表明该属性的值可能包含任意 UTF-8 编码字符,并且不区分大小写。
GeneralizedTime
表明该属性的值已被编码为可印刷的字符串。必须指定时区。强烈建议您使用 GMT。
IA5String(以前的 ces)
表明该属性的值可能仅包含 ASCII 字符的子集,并且区分大小写。
整型(以前的 int)
表明该属性的有效值为数字。
OctetString
和二进制的行为相同。
通讯地址
表明该属性的值被编码为
dstring[$dstring]*
其中,每个 dstring 组件编码为具有 DirectoryString 语法的值。dstring 中的反斜线符号和美元字符必须加上引号,
以免被误认为行分隔符。许多服务器通讯地址限制为 6 行,字符限制上限为 30。例如:1234 Main St.$Anytown, CA 12345$USA
TelephoneNumber(以前的 tel)
表示该属性的值为电话号码形式。建议使用国际形式的电话号码。
URI
表明该属性的值包含一个 URL(带有一个可选前缀),如 http://、https://、ftp://、ldap://
或 ldaps://。URI 值的行为与 IA5String 相同(请参阅 RFC 2396,http://www.ietf.org/rfc/rfc2396.txt。)创建属性
要向模式添加您自身的属性定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“属性”标签。
- 单击“创建”以显示“创建属性”对话框。
- 在文本字段中输入以下信息以定义新属性。只有属性名称和语法是必须填写的:
- 属性名称 - 输入属性的唯一名称,也称为属性类型。属性名称必须以字母开头,并且只能包含 ASCII 字母、数字和连字符。
注意 属性名称可以包含大写字母,但没有 LDAP 客户机会依赖这些字母进行识别。必须按照 RFC 2251 (http://www.ietf.org/rfc/rfc2251.txt)
4.1.4 小节的说明,以不区分大小写的方式来处理属性名称。
- 属性 OID(可选)- 输入属性的对象标识符。在表 9-1 中对 OID 进行了说明。如果不指定 OID,Directory Server 将自动使用 attributeName-oid。请注意,为了严格遵从 LDAP v3,必须提供一个有效的数字 OID。
- 属性别名(可选)- 在以逗号分隔的列表中输入属性的备用名称。
- 属性说明(可选)- 输入简短的说明文字以说明属性的用途。
- 语法 - 从下拉列表中选择一个说明属性所要包含数据的语法。在表 9-2 中对可供使用的语法进行了说明。
- 多值 - 默认情况下,属性将为多值。如果属性的每个条目最多只能有一个值,则请取消选中该复选框。
- 在“创建属性”对话框中单击“确定”以定义新属性。该属性将出现在用户定义属性的表格中。
在目录条目中定义该属性的值之前,必须创建或编辑需要或允许此属性的对象类,如“管理对象类定义”中所述。
编辑属性
使用控制台只能编辑用户定义的属性。在修改属性的名称、语法和多值定义之前,必须确保目录中的条目当前未使用此属性,否则客户机将不能访问该条目。
要修改属性的模式定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“属性”标签。
- 在“用户定义的属性”表格中,选择要编辑的属性,然后单击“编辑”。
- 修改“编辑属性”对话框的字段以重新定义属性。
- 完成对属性的编辑后,请单击“确定”保存更改。
删除属性
使用控制台只能删除用户定义的属性。在删除属性定义之前,必须确保目录中的条目当前未使用此属性,否则客户机将不能访问该条目。
要删除属性的模式定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“属性”标签。
- 在“用户定义的属性”表格中,选择该属性,然后单击“删除”。
- 提示您删除时请进行确认。
服务器将立即删除属性定义。条目删除后不可恢复。
管理对象类定义
Directory Server 控制台还提供一个界面,可以查看模式中的所有对象类,并可以创建、编辑和删除您自身的对象类定义。
查看对象类
要查看有关目录模式中当前定义的所有对象类的信息,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“对象类”标签。
该标签包含的列表列出了模式中的所有标准(只读)对象类和用户定义的对象类。
- 选择要在任一列表中查看的对象类。
此标签中的其他字段显示了有关所选对象类的以下信息:
表 9-3    “对象类”标签的字段
字段
说明
必需的属性
包含必须出现在使用该对象类的条目中的一组属性。该列表包括继承的属性。
允许的属性
包含可能出现于使用该对象类的条目中的一组属性。该列表包括继承的属性。
父对象类
父对象类标识对象类从中继承其属性和结构的对象类。对象类自动从其父对象类继承必需属性和允许属性。
OID
对象类的对象标识符。OID 是一个字符串(通常由带点的十进制数构成),它唯一标识模式对象。
有关 OID 的详细信息,或者想为企业申请前缀,请向 IANA(Internet 分配号码机构)发邮件,
地址是 iana@iana.org;也可访问 IANA 网站 http://www.iana.org/。创建对象类
如果要创建互相继承的若干对象类,必须首先创建父对象类。如果新对象类要使用自定义属性,还必须首先定义这些自定义属性。
注意 控制台仅允许创建结构对象类。这些对象类都必须继承父对象类。要定义辅助对象类和抽象对象类,必须使用命令行公用程序。
要向模式添加您自身的对象类定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“对象类”标签。
- 单击“创建”以显示“创建对象类”对话框。
- 在文本字段中输入以下信息,以定义新对象类:
- 名称 - 输入对象类的唯一名称。
- 父条目 - 选择要作为父对象类的现有对象类。默认情况下,将选定 top 且必须用作父对象类(如果对象类没有从其他任何对象类继承)。从父对象类继承的必需属性和允许属性及其父对象类将显示在相应的列表中。
通常,如果要添加用户条目的新属性,则父对象类将是 inetOrgPerson 对象类。如果要添加公司条目的新属性,父对象类通常为 organization 或 organizationalUnit。如果要添加组条目的新属性,父对象类通常为 groupOfNames 或 groupOfUniqueNames。
- OID(可选)- 输入属性的对象标识符。在表 9-3 中对 OID 进行了说明。如果不指定 OID,Directory Server 将自动使用 objectClassName-oid。请注意,为了严格遵从 LDAP v3,必须提供一个有效的数字 OID。
- 定义使用新对象类的条目要包含的属性:
- 要定义必须出现的属性,请在“可用属性”列表中选择一个或多个属性,然后单击“必需的属性”框左侧的“添加”按钮。
- 要定义可能出现的属性,请在“可用属性”列表中选择一个或多个属性,然后单击“允许的属性”框左侧的“添加”按钮。
- 要删除先前添加的属性,可在上述任一列表中突出显示该属性,然后单击相应的“删除”按钮。不能删除从父对象类继承而来的允许属性或必需属性。
- 在“创建对象类”对话框中单击“确定”以定义新对象类。新对象类将出现在用户定义的对象类表格中,现在您可以定义具有此对象类的条目。
编辑对象类
使用控制台只能编辑用户定义的对象类。在修改对象类的定义之前,必须确保目录中当前没有使用此对象类的条目,否则客户机将不能访问该条目。
要修改对象类的模式定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“对象类”标签。
- 从“用户定义的对象类”列表中,选择要编辑的对象类,然后单击“编辑”。
- 修改“编辑对象类”对话框的字段以重新定义对象类。
不能重命名对象类,也不能更改其 OID。要修改上述内容,请删除此对象类并创建一个新对象类。
- 父条目 - 选择要作为父对象类的现有对象类。从父对象类中继承的必需属性和允许属性及其父对象类将显示在相应的列表中。
- 要定义必须出现的属性,请在“可用属性”列表中选择一个或多个属性,然后单击“必需的属性”框左侧的“添加”按钮。
- 要定义可能出现的属性,请在“可用属性”列表中选择一个或多个属性,然后单击“允许的属性”框左侧的“添加”按钮。
- 要删除先前添加的属性,可在上述任一列表中突出显示该属性,然后单击相应的“删除”按钮。不能删除从父对象类继承而来的允许属性或必需属性。
- 完成对象类的编辑后,请单击“确定”保存更改。
删除对象类
使用控制台只能删除用户定义的对象类。在删除对象类定义之前,必须确保目录中当前没有使用此对象类的条目,否则客户机将不能访问该条目。
要删除对象类的模式定义,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中,选择配置树中的“模式”节点,然后在右侧面板中选择“对象类”标签。
- 在用户定义的对象类列表中,选择对象类名称,然后单击“删除”。
- 提示您删除时请进行确认。
服务器将立即删除对象类定义。条目删除后不可恢复。
复制模式定义
不论何时配置两个服务器间一个或多个后缀的复制,也将自动复制模式。这将确保所有副本都有一个完整、相同的模式,此模式定义可能复制到使用者的所有对象类和属性。因此,主副本服务器也包含主模式。
要在所有副本上实施模式,必须在所有的主副本上启用模式检查。因为在执行 LDAP 操作的主副本上执行模式检查,所以更新使用者副本时不需要检查模式。为提高性能,复制机制将避开对使用者副本进行模式检查。
注意 不应该在集线器副本和专门的客户副本中关闭模式检查。模式检查对使用者没有性能影响,应该使其保持打开状态,以表示副本内容符合其模式。
使用者初始化期间以及不论何时通过控制台或命令行工具修改模式,主副本服务器会将模式自动复制到其使用者。默认情况下将复制整个模式,并且创建使用者中还不存在的任何其他模式元素,并将其存储在 99user.ldif 文件中。
例如,假设启动时主副本服务器在 98mySchema.ldif 文件中包含模式定义,然后您定义了与其他服务器(可能为主副本服务器、集线器服务器或专门的客户服务器)之间的复制协议。随后从主副本服务器中初始化副本时,已复制的模式将包含 98mySchema.ldif 中的定义,但它们将存储在副本服务器的 99user.ldif 中。
使用者初始化期间复制模式后,在主副本的 cn=schema 中修改模式也会将整个模式复制到使用者。因此,通过命令行公用程序或控制台对主副本模式所作的任何修改都将被复制到使用者副本。这些修改将被存储在主副本的 99user.ldif 中,通过上面所述的相同机制,这些修改也将被存储在使用者副本的 99user.ldif 中。
修改已复制的模式文件
复制机制无法检测到对包含模式的 LDIF 文件直接进行的任何更改。因此,如果按照“修改模式文件”中的说明更新模式,即使重新启动主副本服务器后,所做的更改也不会复制到使用者副本中。
Directory Server 5.2 提供了以下脚本,用来将模式文件中的更改“推送”至使用者副本:
Windows 平台
cd ServerRoot
bin\slapd\admin\bin\perl slapd-serverID\schema_push.pl其他安装
# ServerRoot/slapd-serverID/schema_push.pl
请使用以下步骤在主副本服务器上修改模式文件:
- 在模式目录中添加新模式文件或修改现有模式文件:
ServerRoot/slapd-serverID/config/schema
只有安装期间定义的系统用户才可以向目录中的模式文件写入。详细信息,请参阅“修改模式文件”。
- 使用上面给出的适当命令运行 schema_push.pl 脚本。该脚本并不是真的向副本“推送”模式,而是将一个特殊属性写入模式文件,这样加载模式文件后,即会对其进行复制。
- 重新启动服务器。服务器将加载所有模式文件,复制机制会将新模式复制到其使用者副本。
限制模式复制
默认情况下,不论何时复制机制复制模式,都会将整个模式发送至使用者副本。有两种情况不希望出现上述情形:
- 使用控制台或从命令行对 cn=schema 进行修改仅限于用户定义的模式元素,所有标准模式都不会更改。如果经常修改模式,每次发送大量未更改的模式元素将会影响性能。可以通过仅复制用户定义的模式元素来提高复制性能和服务器性能。
- Directory Server 5.2 的主副本服务器向 Directory Server 5.1 的使用者服务器进行复制时,这些版本的配置属性的模式是不同的,并会产生冲突。这种情况下,必须仅复制用户定义的模式元素,如下所述。
使用以下命令来限制模式复制,从而仅复制用户定义的模式:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:cn=config
changetype:modify
replace:nsslapd-schema-repl-useronly
nsslapd-schema-repl-useronly:on如果需要,off 默认值将使整个模式被复制。