本节描述了系统和状态变量,以便配置和监控 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 USER
或SET 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 AppliesNo 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 或对应的符号值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
如果密码策略为
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 |
+-----------------------------------------------+---------------------+
以下列表描述了每个状态变量的含义。
-
validate_password.dictionary_file_last_parsed
最后解析字典文件的时间。此变量仅在
validate_password
安装时可用。 -
validate_password.dictionary_file_words_count
从字典文件中读取的单词数量。此变量仅在
validate_password
安装时可用。
在 MySQL 8.3 中,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 节,“安装和卸载插件” 所述。例如,--validate-password=FORCE_PLUS_PERMANENT
告诉服务器在启动时加载插件,并防止其在服务器运行时被删除。只有在
validate_password
插件以前已注册INSTALL PLUGIN
或加载--plugin-load-add
时,才可用该选项。请参阅 第 8.4.3.1 节,“密码验证组件安装和卸载”。
在 MySQL 8.3 中,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 Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
该
validate_password
插件系统变量已弃用;预计它将在未来版本的 MySQL 中被删除。请使用validate_password.check_user_name
系统变量的validate_password
组件 instead。 -
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 AppliesNo Type File name 该
validate_password
插件系统变量已弃用;预计它将在未来版本的 MySQL 中被删除。请使用validate_password.dictionary_file
系统变量的validate_password
组件 instead。 -
Command-Line Format --validate-password-length=#
System Variable validate_password_length
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 8
Minimum Value 0
这个
validate_password
插件系统变量已弃用;预计在未来版本的 MySQL 中删除。请使用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
这个
validate_password
插件系统变量已弃用;预计在未来版本的 MySQL 中删除。请使用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
这个
validate_password
插件系统变量已弃用;预计在未来版本的 MySQL 中删除。请使用validate_password
组件的相应validate_password.number_count
系统变量。 -
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
组件的相应validate_password.policy
系统变量。 -
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
组件的相应validate_password.special_char_count
系统变量。
在 MySQL 8.3 中,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
组件的对应validate_password.dictionary_file_last_parsed
状态变量。 -
validate_password_dictionary_file_words_count
该
validate_password
插件状态变量已弃用;预计在未来版本的 MySQL 中删除。请使用validate_password
组件的对应validate_password.dictionary_file_words_count
状态变量。