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.changed_characters_percentage
允许当前密码中的所有字符在新密码中重复使用。有效百分比范围为0到100。如果设置为100%,则当前密码中的所有字符都被拒绝,忽略大小写。字符‘abc
’和‘ABC
’被认为是相同的字符。如果validate_password
拒绝新密码,它将报告错误,指示最小的字符数差异。如果
ALTER USER
语句不提供现有密码在REPLACE
子句中,这个变量将不被强制执行。是否需要REPLACE
子句取决于给定帐户的密码验证策略。关于策略的概述,请参见Password Verification-Required Policy。 -
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
启用时,它将产生以下效果:-
在所有
ALTER USER
或SET 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
Command-Line Format --validate-password.dictionary-file=file_name
System Variable validate_password.dictionary_file
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 密码验证使用的字典文件路径名。这一变量在
validate_password
安装时不可用。默认情况下,这个变量为空,字典检查不进行。要进行字典检查,变量值必须非空。如果文件名以相对路径命名,它将相对于服务器数据目录解释。文件内容应该是小写,单词一行。内容将被视为
utf8mb3
字符集。最大允许文件大小为1MB。为了在密码检查中使用字典文件,密码策略必须设置为2(
STRONG
);见validate_password.policy
系统变量的描述。假设是真的,每个密码的子串长度为4到100将与字典文件中的单词进行比较。任何匹配都将导致密码被拒绝。比较不是区分大小写的。对于
VALIDATE_PASSWORD_STRENGTH()
,密码将对所有策略进行检查,包括STRONG
,因此强度评估包括字典检查,无论validate_password.policy
值是什么。validate_password.dictionary_file
可以在运行时设置,并将文件读取到服务器重新启动时。 -
Command-Line Format --validate-password.length=#
System Variable validate_password.length
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8
Minimum Value 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
Command-Line Format --validate-password.mixed-case-count=#
System Variable validate_password.mixed_case_count
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
如果密码策略为MEDIUM或更强,如果validate_password要求密码至少包含validate_password.mixed_case_count个小写和大写字符。这变量在validate_password安装时不可用。
对于给定的validate_password.mixed_case_count值,密码必须包含该多个小写字符和该多个大写字符。
-
validate_password.number_count
Command-Line Format --validate-password.number-count=#
System Variable validate_password.number_count
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
如果密码策略为MEDIUM或更强,如果validate_password要求密码至少包含validate_password.number_count个数字字符。这变量在validate_password安装时不可用。
-
Command-Line Format --validate-password.policy=value
System Variable validate_password.policy
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value 1
Valid Values 0
1
2
validate_password所强制执行的密码策略。这变量在validate_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
Policy Tests Performed 0
或LOW
长度 1
或MEDIUM
长度;数字、大小写和特殊字符 2
或STRONG
长度;数字、大小写和特殊字符;词典文件 -
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
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 |
+-----------------------------------------------+---------------------+
以下列表描述了每个状态变量的含义。
-
validate_password.dictionary_file_last_parsed
最后一次解析字典文件的时间。这变量在
validate_password
安装时不可用。 -
validate_password.dictionary_file_words_count
从字典文件中读取的单词数量。这变量在
validate_password
安装时不可用。
在 MySQL 8.4 中,validate_password
插件被重新实现为validate_password
组件。validate_password
插件已弃用;在将来版本的 MySQL 中将被删除。因此,它的选项也已弃用,您应该期望它们也将被删除。使用插件的 MySQL 安装应该转换为使用组件。请参阅第8.4.3.3节,“Transitioning to the Password Validation Component”。
要控制validate_password
插件的激活,请使用以下选项:
-
Command-Line Format --validate-password[=value]
Type 枚举 Default Value ON
Valid Values ON
OFF
FORCE
FORCE_PLUS_PERMANENT
这个选项控制服务器在启动时加载已弃用的
validate_password
插件。值应该是可用的插件加载选项的其中一种,详见第7.6.1节,“Installing and Uninstalling Plugins”。例如--validate-password=FORCE_PLUS_PERMANENT
告诉服务器在启动时加载插件,并且在服务器运行时不能删除它。这个选项仅在
validate_password
插件之前已注册使用INSTALL PLUGIN
或使用--plugin-load-add
加载时可用。请参阅第8.4.3.1节,“Password Validation Component Installation and Uninstallation”。
MySQL 8.4中,validate_password
插件被重新实现为validate_password
组件。validate_password
插件已弃用,预计将在未来的MySQL版本中删除。因此,它们的系统变量也已弃用,您应该预期它们也将被删除。使用validate_password
组件的相应系统变量;见密码验证组件系统变量。使用插件的MySQL安装应该将其转换为使用组件;见第8.4.3.3节,“转换到密码验证组件”。
-
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
插件系统变量已弃用,预计将在未来的MySQL版本中删除。使用validate_password.check_user_name
组件的相应系统变量。 -
validate_password_dictionary_file
Command-Line Format --validate-password-dictionary-file=file_name
System Variable validate_password_dictionary_file
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 这个
validate_password
插件系统变量已弃用,预计将在未来的MySQL版本中删除。使用validate_password.dictionary_file
组件的相应系统变量。 -
Command-Line Format --validate-password-length=#
System Variable validate_password_length
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8
Minimum Value 0
该
validate_password
插件系统变量已弃用;预计将在未来的MySQL版本中删除。请使用相应的validate_password.length
系统变量,而不是validate_password
组件。 -
validate_password_mixed_case_count
Command-Line Format --validate-password-mixed-case-count=#
System Variable validate_password_mixed_case_count
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
该
validate_password
插件系统变量已弃用;预计将在未来的MySQL版本中删除。请使用相应的validate_password.mixed_case_count
系统变量,而不是validate_password
组件。 -
validate_password_number_count
Command-Line Format --validate-password-number-count=#
System Variable validate_password_number_count
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
该
validate_password
插件系统变量已弃用;预计将在未来的MySQL版本中删除。请使用相应的validate_password.number_count
系统变量,而不是validate_password
组件。 -
Command-Line Format --validate-password-policy=value
System Variable validate_password_policy
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value 1
Valid Values 0
1
2
该
validate_password
插件系统变量已弃用;预计将在未来的MySQL版本中删除。请使用相应的validate_password.policy
系统变量,而不是validate_password
组件。 -
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
这个
validate_password
插件系统变量已经废弃;在未来的MySQL版本中将被删除。使用相应的validate_password.special_char_count
系统变量,而不是validate_password
组件。
在 MySQL 8.4 中,validate_password
插件被重新实现为validate_password
组件。validate_password
插件已经废弃;在未来的 MySQL 版本中将被删除。因此,它的状态变量也将被删除。使用相应的状态变量,而不是validate_password
组件;见密码验证组件状态变量。使用插件的 MySQL 安装应该将其转换为使用组件;见第8.4.3.3节,“转换到密码验证组件”。
-
validate_password_dictionary_file_last_parsed
这个
validate_password
插件状态变量已经废弃;在未来的 MySQL 版本中将被删除。使用相应的validate_password.dictionary_file_last_parsed
状态变量,而不是validate_password
组件。 -
validate_password_dictionary_file_words_count
这个
validate_password
插件状态变量已经废弃;在未来的 MySQL 版本中将被删除。使用相应的validate_password.dictionary_file_words_count
状态变量,而不是validate_password
组件。