文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  密码验证选项和变量

8.4.3.2 密码验证选项和变量

本节介绍 validate_password 提供的系统和状态变量,以便对其操作进行配置和监控。

密码验证组件系统变量

如果启用了 validate_password 组件,它会公开多个系统变量,以允许配置密码检查。

mysql> SHOW VARIABLES LIKE 'validate_password.%';
+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
+-------------------------------------------------+--------+

要更改密码检查方式,可以在服务器启动时或运行时设置这些系统变量。以下列表描述了每个变量的含义。

  • validate_password.changed_characters_percentage

    命令行格式 --validate-password.changed-characters-percentage[=value]
    系统变量 validate_password.changed_characters_percentage
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 100

    指示密码中必须更改的字符数(占所有字符的百分比),用户必须更改这些字符,validate_password 才会接受用户对其自身帐户的新密码。这仅在更改现有密码时适用,对设置用户帐户的初始密码没有影响。

    除非安装了 validate_password,否则此变量不可用。

    默认情况下,validate_password.changed_characters_percentage 允许在新的密码中重复使用当前密码中的所有字符。有效百分比范围为 0 到 100。如果设置为 100%,则会拒绝当前密码中的所有字符,无论大小写如何。字符 'abc' 和 'ABC' 被视为相同字符。如果 validate_password 拒绝新密码,它会报告一个错误,指出必须不同的最小字符数。

    如果 ALTER USER 语句没有在 REPLACE 子句中提供现有密码,则不会强制执行此变量。是否需要 REPLACE 子句取决于密码验证策略,该策略适用于给定帐户。有关策略概述,请参见 密码验证要求策略

  • validate_password.check_user_name

    命令行格式 --validate-password.check-user-name[={OFF|ON}]
    系统变量 validate_password.check_user_name
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 ON

    是否 validate_password 将密码与当前会话的有效用户帐户的用户名部分进行比较,如果匹配则拒绝。除非安装了 validate_password,否则此变量不可用。

    默认情况下,validate_password.check_user_name 已启用。此变量独立于 validate_password.policy 的值控制用户名匹配。

    validate_password.check_user_name 启用时,它具有以下影响

    • 检查发生在所有调用 validate_password 的上下文中,包括使用诸如 ALTER USERSET PASSWORD 更改当前用户密码的语句,以及调用诸如 VALIDATE_PASSWORD_STRENGTH() 的函数。

    • 用于比较的用户名称取自当前会话的 USER()CURRENT_USER() 函数的值。这意味着具有足够权限设置其他用户密码的用户可以将密码设置为该用户的名称,但不能将该用户的密码设置为执行语句的用户名称。例如,'root'@'localhost' 可以将 'jeffrey'@'localhost' 的密码设置为 'jeffrey',但不能将其设置为 'root

    • 只使用 USER()CURRENT_USER() 函数值的用户名部分,不使用主机名部分。如果用户名为空,则不进行比较。

    • 如果密码与用户名或其反转相同,则发生匹配,密码将被拒绝。

    • 用户名匹配区分大小写。密码和用户名值以字节为单位逐字节比较为二进制字符串。

    • 如果密码与用户名匹配,VALIDATE_PASSWORD_STRENGTH() 返回 0,无论其他 validate_password 系统变量如何设置。

  • validate_password.dictionary_file

    命令行格式 --validate-password.dictionary-file=file_name
    系统变量 validate_password.dictionary_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    validate_password 用于检查密码的字典文件的路径名。除非安装了 validate_password,否则此变量不可用。

    默认情况下,此变量的值为空,并且不执行字典检查。要执行字典检查,变量值必须不为空。如果文件被命名为相对路径,则它将相对于服务器数据目录进行解释。文件内容应为小写,每行一个词。内容被视为具有 utf8mb3 字符集。最大允许文件大小为 1MB。

    要使字典文件在密码检查期间使用,密码策略必须设置为 2 (STRONG);请参阅 validate_password.policy 系统变量的描述。假设这是真的,密码的长度为 4 到 100 的每个子字符串都与字典文件中的单词进行比较。任何匹配都会导致密码被拒绝。比较不区分大小写。

    对于 VALIDATE_PASSWORD_STRENGTH(),密码将根据所有策略进行检查,包括 STRONG,因此强度评估包括字典检查,无论 validate_password.policy 值如何。

    validate_password.dictionary_file 可以在运行时设置,分配值会导致读取命名文件而无需服务器重启。

  • validate_password.length

    命令行格式 --validate-password.length=#
    系统变量 validate_password.length
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8
    最小值 0

    validate_password 要求密码具有的最少字符数。除非安装了 validate_password,否则此变量不可用。

    validate_password.length 最小值是几个其他相关系统变量的函数。该值不能设置为小于此表达式的值

    validate_password.number_count
    + validate_password.special_char_count
    + (2 * validate_password.mixed_case_count)

    如果 validate_password 由于上述约束调整了 validate_password.length 的值,它会将消息写入错误日志。

  • validate_password.mixed_case_count

    命令行格式 --validate-password.mixed-case-count=#
    系统变量 validate_password.mixed_case_count
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0

    如果密码策略为 MEDIUM 或更强,validate_password 要求密码具有的最小小写和大写字符数。除非安装了 validate_password,否则此变量不可用。

    对于给定的 validate_password.mixed_case_count 值,密码必须具有相同数量的小写字符和大写字符。

  • validate_password.number_count

    命令行格式 --validate-password.number-count=#
    系统变量 validate_password.number_count
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0

    如果密码策略为 MEDIUM 或更强,validate_password 要求密码具有的最小数字(数字)字符数。除非安装了 validate_password,否则此变量不可用。

  • validate_password.policy

    命令行格式 --validate-password.policy=value
    系统变量 validate_password.policy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 1
    有效值

    0

    1

    2

    validate_password 强制的密码策略。除非安装了 validate_password,否则此变量不可用。

    validate_password.policy 影响 validate_password 如何使用其其他策略设置系统变量,但检查密码与用户名是否匹配除外,此操作由 validate_password.check_user_name 独立控制。

    validate_password.policy 值可以使用数值 0、1、2 或相应的符号值 LOWMEDIUMSTRONG 指定。下表描述了对每种策略执行的测试。对于长度测试,所需长度是 validate_password.length 系统变量的值。类似地,其他测试的所需值由其他 validate_password.xxx 变量给出。

    策略 执行的测试
    0LOW 长度
    1MEDIUM 长度;数字、小写/大写和特殊字符
    2STRONG 长度;数字、小写/大写和特殊字符;字典文件
  • validate_password.special_char_count

    命令行格式 --validate-password.special-char-count=#
    系统变量 validate_password.special_char_count
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0

    如果密码策略为 MEDIUM 或更强,validate_password 要求密码具有的最小非字母数字字符数。除非安装了 validate_password,否则此变量不可用。

密码验证组件状态变量

如果启用了 validate_password 组件,它会公开提供操作信息的 status 变量

mysql> SHOW STATUS LIKE 'validate_password.%';
+-----------------------------------------------+---------------------+
| Variable_name                                 | Value               |
+-----------------------------------------------+---------------------+
| validate_password.dictionary_file_last_parsed | 2019-10-03 08:33:49 |
| validate_password.dictionary_file_words_count | 1902                |
+-----------------------------------------------+---------------------+

以下列表描述了每个 status 变量的含义。

密码验证插件选项
注意

在 MySQL 9.0 中,validate_password 插件被重新实现为 validate_password 组件。validate_password 插件已弃用;预计它将在未来版本的 MySQL 中被移除。因此,它的选项也已弃用,并且您应该预期它们也将被移除。使用插件的 MySQL 安装应该迁移到使用组件。请参阅 第 8.4.3.3 节,“迁移到密码验证组件”

要控制 validate_password 插件的激活,请使用此选项

密码验证插件系统变量
注意

在 MySQL 9.0 中,validate_password 插件被重新实现为 validate_password 组件。validate_password 插件已弃用;预计它将在未来版本的 MySQL 中被移除。因此,它的系统变量也已弃用,并且您应该预期它们也将被移除。请使用 validate_password 组件的相应系统变量;请参阅 密码验证组件系统变量。使用插件的 MySQL 安装应该迁移到使用组件。请参阅 第 8.4.3.3 节,“迁移到密码验证组件”

密码验证插件状态变量
注意

在 MySQL 9.0 中,validate_password 插件被重新实现为 validate_password 组件。validate_password 插件已弃用;预计将在未来版本的 MySQL 中删除。因此,其状态变量也已弃用;预计将在未来版本中删除。请使用 validate_password 组件的相应状态变量;请参见 密码验证组件状态变量。使用该插件的 MySQL 安装应该迁移到使用该组件。请参见 第 8.4.3.3 节,“迁移到密码验证组件”.