文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 组件,它将公开状态变量以提供操作信息

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                |
+-----------------------------------------------+---------------------+

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

密码验证插件选项
注意

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

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

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

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

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

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