Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Password Validation Options and Variables

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

    Command-Line Format --validate-password.changed-characters-percentage[=value]
    System Variable validate_password.changed_characters_percentage
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 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

    Command-Line Format --validate-password.check-user-name[={OFF|ON}]
    System Variable validate_password.check_user_name
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value 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

    Command-Line Format --validate-password.dictionary-file=file_name
    System Variable validate_password.dictionary_file
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type 文件名

    该变量指定了 validate_password 用于检查密码的字典文件的路径名。该变量在 validate_password 未安装时不可用。

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

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

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

    验证密码.字典文件 可以在运行时设置,并且分配值将导致命名文件被读取,而不需要服务器重新启动。

  • 验证密码.长度

    Command-Line Format --验证密码.长度=#
    System Variable 验证密码.长度
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8
    Minimum Value 0

    验证密码要求密码的最小字符数。此变量仅在验证密码安装时可用。

    验证密码.长度的最小值是几个相关系统变量的函数。不能将值设置为小于该表达式的值:

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

    如果验证密码由于前一个约束而调整验证密码.长度的值,则它将写入错误日志。

  • 验证密码.混合大小写计数

    Command-Line Format --验证密码.混合大小写计数=#
    System Variable 验证密码.混合大小写计数
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 0

    验证密码要求密码的最小小写和大写字符数,如果密码策略为中等或更高。此变量仅在验证密码安装时可用。

    对于给定的验证密码.混合大小写计数值,密码必须具有那么多小写字符和那么多大写字符。

  • 验证密码.数字计数

    Command-Line Format --验证密码.数字计数=#
    System Variable 验证密码.数字计数
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 0

    验证密码要求密码的最小数字字符数,如果密码策略为中等或更高。此变量仅在验证密码安装时可用。

  • 验证密码.策略

    Command-Line Format --验证密码.策略=值
    System Variable 验证密码.策略
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value 1
    Valid Values

    0

    1

    2

    验证密码实施的密码策略。此变量仅在验证密码安装时可用。

    验证密码.策略 影响验证密码如何使用其其他策略设置系统变量,除了检查密码与用户名的比较,该比较由 验证密码.检查用户名 独立控制。

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

    Policy Tests Performed
    0LOW 长度
    1MEDIUM 长度;数字、大小写和特殊字符
    2STRONG 长度;数字、大小写和特殊字符;字典文件
  • validate_password.special_char_count

    Command-Line Format --validate-password.special-char-count=#
    System Variable validate_password.special_char_count
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 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                |
+-----------------------------------------------+---------------------+

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

密码验证插件选项
Note

在 MySQL 8.3 中,validate_password 插件被重新实现为 validate_password 组件。validate_password 插件已弃用;预计在未来版本的 MySQL 中将其删除。因此,其选项也将被删除。使用插件的 MySQL 安装应该转换为使用组件。请参阅 第 8.4.3.3 节,“Transitioning to the Password Validation Component”

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

密码验证插件系统变量
Note

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

密码验证插件状态变量
Note

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