MySQL 8.0 参考手册  / 第 6 章 安全  / 6.4 安全组件和插件  / 6.4.3 密码验证组件  /  6.4.3.2 密码验证插件选项和变量

6.4.3.2 密码验证插件选项和变量

本节介绍选项、系统变量和状态变量,这些选项、系统变量和状态变量validate_password可用于配置和监视其操作。

密码验证插件选项

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

密码验证插件系统变量

如果validate_password启用了插件,它会公开几个启用密码检查配置的系统变量:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| 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_check_user_name

    命令行格式 --validate-password-check-user-name[={OFF|ON}]
    介绍 5.7.15
    系统变量 validate_password_check_user_name
    范围 全球的
    动态的 是的
    类型 布尔值
    默认值 OFF

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

    默认情况下, validate_password_check_user_name 禁用。此变量控制独立于 值的用户名匹配 validate_password_policy

    启用时 validate_password_check_user_name ,它具有以下效果:

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

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

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

    • 如果密码与用户名相同或相反,则会发生匹配并拒绝密码。

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

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

  • validate_password_dictionary_file

    命令行格式 --validate-password-dictionary-file=file_name
    系统变量 validate_password_dictionary_file
    范围 全球的
    动态的 是的
    类型 文件名

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

    默认情况下,此变量具有空值并且不执行字典检查。要进行字典检查,变量值必须为非空。如果文件被命名为相对路径,则它被解释为相对于服务器数据目录。文件内容应小写,每行一个字。内容被视为具有字符集utf8. 允许的最大文件大小为 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
    范围 全球的
    动态的 是的
    类型 整数
    默认值 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
    范围 全球的
    动态的 是的
    类型 整数
    默认值 1
    最小值 0

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

    对于给定的 validate_password_mixed_case_count 值,密码必须有那么多小写字符和那么多大写字符。

  • validate_password_number_count

    命令行格式 --validate-password-number-count=#
    系统变量 validate_password_number_count
    范围 全球的
    动态的 是的
    类型 整数
    默认值 1
    最小值 0

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

  • validate_password_policy

    命令行格式 --validate-password-policy=value
    系统变量 validate_password_policy
    范围 全球的
    动态的 是的
    类型 枚举
    默认值 1
    有效值

    0

    1

    2

    由 强制执行的密码策略 validate_passwordvalidate_password除非已安装 ,否则此变量不可用。

    validate_password_policy 影响如何validate_password使用其其他策略设置系统变量,但根据用户名检查密码除外,它由 validate_password_check_user_name.

    validate_password_policy 可以使用数值 0、1、2 或相应的符号值LOW, MEDIUM,来指定 该 值STRONG。下表描述了为每个策略执行的测试。对于长度测试,所需的长度是 validate_password_length 系统变量的值。同样,其他测试所需的值由其他 变量给出。 validate_password_xxx

    政策 进行的测试
    0或者LOW 长度
    1或者MEDIUM 长度; 数字、小写/大写和特殊字符
    2或者STRONG 长度; 数字、小写/大写和特殊字符;词典文件
  • validate_password_special_char_count

    命令行格式 --validate-password-special-char-count=#
    系统变量 validate_password_special_char_count
    范围 全球的
    动态的 是的
    类型 整数
    默认值 1
    最小值 0

    validate_password如果密码策略为MEDIUM 或更强,则要求密码具有 的最小非字母数字字符数 。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                |
+-----------------------------------------------+---------------------+

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