3.5. 致一致性模式概述
LDAP 客户端应用程序通过在目录服务器中使用一致的模式查找目录条目。您不能使用不一致的模式在目录树中找到信息,因为它使用不同的属性或格式来存储相同的信息。
您可以使用以下方法维护模式一致性:
- 您可以使用架构检查来确保属性和对象类确认架构规则。
- 您可以使用语法验证来确保属性值与所需属性语法匹配。
- 您可以选择并应用一致的数据格式。
3.5.1. 架构检查 复制链接链接已复制到粘贴板!
模式检查会验证所有新的或修改的目录条目是否都符合 schema 规则。默认情况下,目录启用模式检查。当违反规则时,目录会拒绝请求的更改。
架构检查会验证是否存在正确的属性。您可以使用语法验证来验证属性值是否采用正确的语法。不要禁用此功能。
启用架构检查后,您必须注意对象类定义的必需属性和允许的属性。当您向条目的对象类定义添加属性时,目录服务器可以返回对象类违反消息。
例如,如果将条目定义为使用 organizationalPerson
对象类,该条目需要通用名称(cn
)和 surname (sn
)属性。在创建条目时,必须设置这些属性的值。另外,还有可在该条目上使用的属性列表,包括 telephoneNumber
、uid
、streetAddress
和 userPassword
等描述性属性。
3.5.2. 语法验证概述 复制链接链接已复制到粘贴板!
语法验证意味着目录服务器验证属性值是否与该属性的必要语法匹配。例如,语法验证可以确认新的 telephoneNumber
属性具有值的有效电话号码。它会被默认启用。
您可以选择为语法验证配置额外的设置,以记录有关语法违反情况的警告信息,然后拒绝修改或允许修改过程成功。
如果添加了新属性值,语法验证会检查 LDAP 操作。它不会处理通过复制等数据库操作添加的现有属性或属性。可以使用 dsconf
schema validate-syntax 命令验证现有属性。
此功能验证除二进制语法和非标准语法之外的所有属性语法,它们没有定义的必要格式。语法会根据 RFC 4514
验证,但 DN 除外,它们会根据不太严格的 RFC 1779
或 RFC 2253
验证。
您可以配置严格的 DN 验证。
3.5.2.1. 目录服务器操作的语法验证 复制链接链接已复制到粘贴板!
语法验证适用于标准 LDAP 操作,如创建条目(添加)或编辑属性(modify)。当您验证属性语法时,它可能会影响其他目录服务器操作。
数据库加密
您可以在值写入 LDAP 操作数据库中前加密属性。这意味着,加密是在验证属性语法后执行的。您可以导入和导出加密的数据库。
您必须使用标志- encrypted (dsctl)
执行导出和导入操作,这允许导入操作进行语法验证。
如果您在不使用加密 标志(不支持)的情况下导出加密
数据库(不支持),则会创建一个带有加密值的 LDIF。您无法验证加密的属性,会记录警告,在导入 LDIF 时跳过属性验证。
同步
对于 Windows Active Directory 条目和 Directory Server 条目中的属性,允许或强制实施语法。您无法同步 Active Directory 值,因为语法验证强制执行 Directory 服务器条目中的 RFC 标准。
复制
如果目录服务器 11.0 实例是将更改复制到消费者的供应商,您可以使用语法验证。但是,假设复制中的供应商是旧版本的目录服务器,或者禁用了语法验证。在这种情况下,无法对 11.0 使用者使用语法验证,因为 Directory 服务器 11.0 使用者可能会拒绝供应商允许的属性值。
3.5.3. 一致的数据格式 复制链接链接已复制到粘贴板!
您可以使用 LDAP 模式将数据带有属性值来放置数据。但是,务必要通过选择适合 LDAP 客户端应用程序和目录用户的格式,将数据存储在目录树中。
您可以使用 LDAP 协议和目录服务器以 RFC 2252
中指定的数据格式表示数据。例如,在两个 ITU-T
建议文档中定义了电话号码的正确 LDAP 格式:
-
ITU-T 建议 E.123
.国家和国际电话号码的表示法。 -
ITU-T 建议 E.163
.国际电话服务的编号计划.例如,美国电话号码格式为+1 555 222 1717
。
再如,postalAddress
属性以多行字符串的形式有一个属性值,其使用美元符号($)作为行分隔符。正确格式化的目录条目如下所示:
postalAddress: 1206 Directory Drive$Pleasant View, MN$34200
postalAddress: 1206 Directory Drive$Pleasant View, MN$34200
属性需要字符串、二进制输入、整数和其他格式。您可以在属性的 schema 定义中设置格式。
3.5.4. 关于在复制模式下保持一致性 复制链接链接已复制到粘贴板!
编辑目录架构时,这些更改记录在 changelog 中。在复制过程中,会扫描 changelog 是否有更改,以及正在复制任何更改。在复制模式下保持一致性,复制可以在没有任何错误的情况下继续。
在复制环境中为保持一致性模式考虑以下点:
不要修改只读副本上的模式。
当您修改只读副本中的模式时,它会在 schema 中引入不一致,并导致复制失败。
不要创建具有相同名称的属性,它们使用不同的语法。
当您在读写副本中创建属性时,其名称与供应商副本上的属性相同,但使用不同于供应商的属性的语法时,复制将失败。