12.12. 使用语法验证


通过语法验证,目录服务器检查属性的值是否遵循该属性定义中给出的语法规则。例如,语法验证将确认新的 telephoneNumber 属性实际具有值的有效电话号码。
重要
红帽建议不要禁用语法验证。

12.12.1. 关于语法验证

与架构检查一样,验证会检查任何目录修改并拒绝违反语法的更改。可以选择性地配置其他设置,使语法验证可以记录关于语法违规消息,然后拒绝修改或允许修改过程成功。
这个功能会验证所有属性语法,但二进制语法(无法验证)和非标准语法(没有定义所需的格式)和非标准语法除外。语法会根据 RFC 4514 进行验证。

12.12.2. 语法验证和其他目录服务器操作

语法验证主要与标准 LDAP 操作相关,如创建条目(添加)或编辑属性(modify)。但是,验证属性语法可能会影响其他目录服务器操作。

数据库加密

对于普通的 LDAP 操作,仅在将值写入数据库前加密属性。这意味着,加密会在验证属性语法进行。

加密的数据库(如 第 10 章 配置属性加密 所述)可以导出和导入。通常,强烈建议使用带有 db2ldifldif2db-E 标志进行这些导出和导入操作,这允许验证功能对导入操作非常正常。但是,如果加密数据库在没有使用 -E 标志(不支持)的情况下导出,那么会创建一个带有加密值的 LDIF。当导入此 LDIF 后,无法验证加密的属性,则会记录警告,并在导入的条目中跳过属性验证。

同步

对于 Windows Active Directory 条目和 Red Hat Directory Server 条目中的属性,允许或拒绝语法。在这种情况下,Active Directory 值无法正确同步,因为语法验证强制执行 Directory Server 条目中的 RFC 标准。

复制

如果 Directory Server 11 实例是将其更改复制到消费者的供应商,则无法使用语法验证问题。但是,如果复制中的供应商是旧版本的目录服务器,或者禁用了语法验证,则消费者不应使用语法验证,因为目录服务器 11 使用者可能会拒绝供应商允许的属性值。

12.12.2.1. 使用命令行打开和关闭语法验证

要打开和关闭语法验证,请设置 nsslapd-syntaxcheck 参数的值。例如,要禁用语法验证:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-syntaxcheck=off
Successfully replaced "nsslapd-syntaxcheck"
Copy to Clipboard Toggle word wrap
有关 nsslapd-syntaxcheck 参数的详情,请查看 红帽目录服务器配置、命令和文件参考中的参数描述

12.12.2.2. 使用 Web 控制台打开语法验证和关闭

使用 Web 控制台启用或禁用语法验证:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings,然后选择 Server Settings 条目。
  4. 打开 Advanced Settings 选项卡。
  5. 要启用属性语法检查,请选中 Enable Attribute Syntax Checking 复选框。要禁用该功能,请清除复选框。
  6. 点击 Save

12.12.3. 为 DN 启用或禁用 Strict 语法验证

启用语法验证后,会验证可分辨名称(DN),如 RFC 4514 第 3 节所述。DN 语法验证是单独启用的,因为后续标准的严格可以使具有不同语法的旧 DN 无效,因此目录树。
注意
如果启用了严格的 DN 验证,并且 DN 值不符合所需的语法,则操作会失败并显示 LDAP 结果代码 34,INVALID_DN_SYNTAX
要为 DN 打开和关闭设置严格的语法验证,请设置 nsslapd-dn-validate-strict 参数的值。例如,为 DN 禁用严格的语法验证:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-dn-validate-strict=off
Successfully replaced "nsslapd-dn-validate-strict"
Copy to Clipboard Toggle word wrap
有关 nsslapd-syntaxcheck 参数的详情,请查看 红帽目录服务器配置、命令和文件参考中的参数描述
使用 Web 控制台为 DN 启用或禁用严格的语法验证:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings,然后选择 Server Settings 条目。
  4. 打开 Advanced Settings 选项卡。
  5. 根据您要启用或禁用该功能,选择或取消选择 Strict DN Syntax Validation 选项。
  6. 点击 Save

12.12.4. 启用语法验证日志记录

默认情况下,语法验证会拒绝任何添加或修改操作,其中属性值违反了所需的语法。但是,默认情况下,违反本身不会记录到错误日志中。nsslapd-syntaxlogging 属性为任何语法违反情况启用错误日志记录。
注意
语法验证脚本和任务发现的语法违反情况记录在目录服务器错误日志中。
如果启用了 nsslapd-syntaxloggingnsslapd-syntaxcheck 参数,则拒绝任何无效的属性修改,并将消息写入日志。如果启用了 nsslapd-syntaxlogging,但 nsslapd-syntaxcheck 被禁用,则操作可以成功,但仍然会写警告信息到错误日志中。

12.12.4.1. 使用命令行启用语法验证日志

要启用语法验证日志记录,请在 上将 nsslapd-syntaxlogging 参数的值设置为。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-syntaxlogging=on
Successfully replaced "nsslapd-syntaxlogging"
Copy to Clipboard Toggle word wrap
有关 nsslapd-syntaxlogging 参数的详情,请查看 红帽目录服务器配置、命令和文件参考中的参数描述
使用 Web 控制台启用验证日志记录:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings,然后选择 Server Settings 条目。
  4. 打开 Advanced Settings 选项卡。
  5. 选择 Enable Attribute Syntax Logging 选项。
  6. 点击 Save

12.12.5. 验证现有属性值的语法

在某些情况下,您可能想要手动验证现有值的语法。例如:
目录服务器将语法验证任务的结果记录到 /var/log/dirsrv/slapd-instance_name/errors 文件中。例如:
  • 如果所有验证的值都有效:
    [28/Jun/2017:12:52:43.669867966 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Starting (base: "dc=example,dc=com", filter: "(objectclass=*)") ...
    [28/Jun/2017:12:52:43.696850129 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Complete.  Found 0 invalid entries.
    Copy to Clipboard Toggle word wrap
  • 如果找到无效的条目:
    [28/Jun/2017:12:54:05.736087520 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Starting (base: "dc=example,dc=com", filter: "(objectclass=*)") ...
    [28/Jun/2017:12:54:05.754195607 +0200] - ERR - syntax-plugin - syntax_validate_task_callback - Entry "cn=user,ou=People,dc=example,dc=com" violates syntax.
    description: value #0 invalid per syntax
    [28/Jun/2017:12:54:05.759905671 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Complete.  Found 1 invalid entries.
    Copy to Clipboard Toggle word wrap
    注意
    语法验证任务仅标识语法违反情况。您必须手动修复不正确的值。
使用 dsconf schema validate-syntax 命令创建语法验证任务。例如,要创建一个任务来验证 ou=People,dc=example,dc=com 子树中所有值的语法,其与 (objectclass=inetorgperson) 过滤器匹配,请输入:
# dsconf -D "cn=Directory Manager" ldap://server.example.com schema validate-syntax -f '(objectclass=inetorgperson)' ou=People,dc=example,dc=com
Copy to Clipboard Toggle word wrap

12.12.5.2. 使用 cn=tasks Entry 创建语法验证任务

Directory Server 配置中的 cn=tasks,cn=config 条目是服务器用来管理任务的临时条目的容器条目。要启动语法验证操作,请在 cn=syntax validate,cn=tasks,cn=config 条目中创建一个任务。
例如,要创建一个任务来验证 ou=People,dc=example,dc=com 子树中所有值的语法,该子树与 (objectclass=inetorgperson) 过滤器匹配:
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=example_syntax_validate,cn=syntax validate,cn=tasks,cn=config
objectclass: extensibleObject
cn: cn=example_syntax_validate
basedn: ou=People,dc=example,dc=com
filter: (objectclass=inetorgperson)
Copy to Clipboard Toggle word wrap
任务完成后,该条目会从目录配置中删除。
有关 cn=syntax validate,cn=tasks,cn=config 条目的详细信息,请参阅 Red Hat Directory Server 配置、命令和文件参考中的 cn=schema 重新加载任务部分。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat