6.4.3.2 密码验证插件选项和变量
本节描述validate_password
提供的选项,系统变量和状态变量,以使其能够被配置和监视。
密码验证插件选项
要控制validate_password
插件的激活,请使用以下选项:
Property | Value |
---|---|
Command-Line Format | --validate-password[=value] |
Type | Enumeration |
Default Value | ON |
Valid Values | ON |
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 描述了每个变量的含义。
Property | Value |
---|---|
Command-Line Format | --validate-password-check-user-name[={OFF|ON}] |
Introduced | 5.7.15 |
System Variable | validate_password_check_user_name |
Scope | Global |
Dynamic | Yes |
Type | Boolean |
Default Value | OFF |
validate_password
是否将密码与当前会话的有效用户帐户的用户名部分进行比较,如果匹配则拒绝。除非安装了validate_password
,否则此变量不可用。
默认情况下,禁用validate_password_check_user_name。此变量控制用户名匹配,而与validate_password_policy的值无关。
启用validate_password_check_user_name后,会产生以下影响:
-
在调用
validate_password
的所有上下文中都会进行检查,包括使用诸如ALTER USER或SET PASSWORD之类的语句来更改当前用户的密码,以及调用诸如PASSWORD()和VALIDATE_PASSWORD_STRENGTH()之类的功能。-
用于比较的用户名来自当前会话的USER()和CURRENT_USER()函数的值。这意味着具有足够特权来设置另一个用户密码的用户可以将密码设置为该用户的名称,而不能将该用户的密码设置为执行该语句的用户的名称。例如,
'root'@'localhost'
可以将'jeffrey'@'localhost'
的密码设置为'jeffrey'
,但是不能将密码设置为'root
。 -
仅使用USER()和CURRENT_USER()函数值中的用户名部分,而不使用主机名部分。如果用户名为空,则不会进行比较。
-
如果密码与用户名相同或相反,则发生匹配并且密码被拒绝。
-
用户名匹配区分大小写。密码和用户名值将以字节为单位以二进制字符串的形式进行比较。
-
如果密码与用户名匹配,则无论如何设置其他
validate_password
系统变量,VALIDATE_PASSWORD_STRENGTH()都将返回 0.
-
Property | Value |
---|---|
Command-Line Format | --validate-password-dictionary-file=file_name |
System Variable | validate_password_dictionary_file |
Scope | Global |
Dynamic | Yes |
Type | File 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可以在运行时设置,分配值将导致在不重新启动服务器的情况下读取命名文件。
Property | Value |
---|---|
Command-Line Format | --validate-password-length=# |
System Variable | validate_password_length |
Scope | Global |
Dynamic | Yes |
Type | Integer |
Default Value | 8 |
Minimum Value | 0 |
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的值,则会将一条消息写入错误日志。
Property | Value |
---|---|
Command-Line Format | --validate-password-mixed-case-count=# |
System Variable | validate_password_mixed_case_count |
Scope | Global |
Dynamic | Yes |
Type | Integer |
Default Value | 1 |
Minimum Value | 0 |
如果密码策略为MEDIUM
或更强,validate_password
要求密码具有的最小大小写字符。除非安装了validate_password
,否则此变量不可用。
对于给定的validate_password_mixed_case_count值,密码必须具有那么多小写字符和那么多大写字符。
Property | Value |
---|---|
Command-Line Format | --validate-password-number-count=# |
System Variable | validate_password_number_count |
Scope | Global |
Dynamic | Yes |
Type | Integer |
Default Value | 1 |
Minimum Value | 0 |
如果密码策略为MEDIUM
或更高,则validate_password
要求密码具有的最小数字(数字)字符数。除非安装了validate_password
,否则此变量不可用。
Property | Value |
---|---|
Command-Line Format | --validate-password-policy=value |
System Variable | validate_password_policy |
Scope | Global |
Dynamic | Yes |
Type | Enumeration |
Default Value | 1 |
Valid Values | 0 |
1 2 |
validate_password
实施的密码策略。除非安装了validate_password
,否则此变量不可用。
validate_password_policy影响validate_password
如何使用其其他策略设置系统变量,除了根据validate_password_check_user_name独立控制用户名检查密码外。
可以使用数字值 0、1、2 或相应的符号值LOW
,MEDIUM
,STRONG
来指定validate_password_policy值。下 table 描述了针对每个策略执行的测试。对于长度测试,所需的长度是validate_password_length系统变量的值。同样,其他测试所需的值由其他validate_password_xxx
变量给出。
Policy | Tests Performed |
---|---|
0 或LOW |
Length |
1 或MEDIUM |
长度;数字,小写/大写和特殊字符 |
2 或STRONG |
长度;数字,小写/大写和特殊字符;字典文件 |
Property | Value |
---|---|
Command-Line Format | --validate-password-special-char-count=# |
System Variable | validate_password_special_char_count |
Scope | Global |
Dynamic | Yes |
Type | Integer |
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 |
+-----------------------------------------------+---------------------+
下 table 描述了每个状态变量的含义。
上次解析字典文件的时间。
从字典文件中读取的单词数。