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

本节描述validate_password提供的选项,系统变量和状态变量,以使其能够被配置和监视。

密码验证插件选项

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

PropertyValue
Command-Line Format--validate-password[=value]
TypeEnumeration
Default ValueON
Valid ValuesON

OFF
FORCE
FORCE_PLUS_PERMANENT

此选项控制服务器在启动时如何加载validate_password插件。该值应该是可用于插件加载选项的值之一,如第 5.5.1 节“安装和卸载插件”中所述。例如,--validate-password=FORCE_PLUS_PERMANENT告诉服务器在启动时加载插件,并阻止在服务器运行时将其删除。

仅当validate_password插件先前已向INSTALL PLUGIN注册或已向--plugin-load-add加载时,此选项才可用。参见第 6.4.3.1 节“密码验证插件安装”

密码验证插件系统变量

如果启用了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      |
+--------------------------------------+--------+

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

PropertyValue
Command-Line Format--validate-password-check-user-name[={OFF|ON}]
Introduced5.7.15
System Variablevalidate_password_check_user_name
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

默认情况下,禁用validate_password_check_user_name。此变量控制用户名匹配,而与validate_password_policy的值无关。

启用validate_password_check_user_name后,会产生以下影响:

  • 在调用validate_password的所有上下文中都会进行检查,包括使用诸如ALTER USERSET PASSWORD之类的语句来更改当前用户的密码,以及调用诸如PASSWORD()VALIDATE_PASSWORD_STRENGTH()之类的功能。

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

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

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

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

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

  • validate_password_dictionary_file

PropertyValue
Command-Line Format--validate-password-dictionary-file=file_name
System Variablevalidate_password_dictionary_file
ScopeGlobal
DynamicYes
TypeFile name

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

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

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

对于VALIDATE_PASSWORD_STRENGTH(),将对照所有策略(包括STRONG)检查密码,因此强度评估包括字典检查,而与validate_password_policy值无关。

validate_password_dictionary_file可以在运行时设置,分配值将导致在不重新启动服务器的情况下读取命名文件。

PropertyValue
Command-Line Format--validate-password-length=#
System Variablevalidate_password_length
ScopeGlobal
DynamicYes
TypeInteger
Default Value8
Minimum Value0

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

validate_password_length最小值是其他几个相关系统变量的函数。该值的设置不能小于此 table 达式的值:

validate_password_number_count
+ validate_password_special_char_count
+ (2 * validate_password_mixed_case_count)

如果validate_password由于前面的约束而调整validate_password_length的值,则会将一条消息写入错误日志。

PropertyValue
Command-Line Format--validate-password-mixed-case-count=#
System Variablevalidate_password_mixed_case_count
ScopeGlobal
DynamicYes
TypeInteger
Default Value1
Minimum Value0

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

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

PropertyValue
Command-Line Format--validate-password-number-count=#
System Variablevalidate_password_number_count
ScopeGlobal
DynamicYes
TypeInteger
Default Value1
Minimum Value0

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

PropertyValue
Command-Line Format--validate-password-policy=value
System Variablevalidate_password_policy
ScopeGlobal
DynamicYes
TypeEnumeration
Default Value1
Valid Values0

1
2

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

validate_password_policy影响validate_password如何使用其其他策略设置系统变量,除了根据validate_password_check_user_name独立控制用户名检查密码外。

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

PolicyTests Performed
0LOWLength
1MEDIUM长度;数字,小写/大写和特殊字符
2STRONG长度;数字,小写/大写和特殊字符;字典文件

PropertyValue
Command-Line Format--validate-password-special-char-count=#
System Variablevalidate_password_special_char_count
ScopeGlobal
DynamicYes
TypeInteger
Default Value1
Minimum Value0

如果密码策略为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                |
+-----------------------------------------------+---------------------+

下 table 描述了每个状态变量的含义。

上次解析字典文件的时间。

从字典文件中读取的单词数。