本节描述 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
命令行格式 --validate-password.changed-characters-percentage[=value]
系统变量 validate_password.changed_characters_percentage
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 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
命令行格式 --validate-password.check-user-name[={OFF|ON}]
系统变量 validate_password.check_user_name
范围 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 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
命令行格式 --validate-password.dictionary-file=file_name
系统变量 validate_password.dictionary_file
范围 全局 动态 是 SET_VAR
提示适用否 类型 文件名 validate_password
用于检查密码的字典文件的路径名。除非安装了validate_password
,否则此变量不可用。默认情况下,此变量的值为空,并且不执行字典检查。要执行字典检查,变量值必须非空。如果文件被命名为相对路径,则将其解释为相对于服务器数据目录。文件内容应为小写,每行一个单词。内容被视为具有
utf8mb3
字符集。允许的最大文件大小为 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
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 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
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
如果密码策略为
MEDIUM
或更强,则validate_password
要求密码具有的最小小写和大写字符数。除非安装了validate_password
,否则此变量不可用。对于给定的
validate_password.mixed_case_count
值,密码必须具有该数量的小写字符和该数量的大写字符。validate_password.number_count
命令行格式 --validate-password.number-count=#
系统变量 validate_password.number_count
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
如果密码策略为
MEDIUM
或更强,则validate_password
要求密码具有的最小数字(数字)字符数。除非安装了validate_password
,否则此变量不可用。-
命令行格式 --validate-password.policy=value
系统变量 validate_password.policy
范围 全局 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 1
有效值 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
策略 执行的测试 0
或LOW
长度 1
或MEDIUM
长度;数字、小写/大写和特殊字符 2
或STRONG
长度;数字、小写/大写和特殊字符;字典文件 validate_password.special_char_count
命令行格式 --validate-password.special-char-count=#
系统变量 validate_password.special_char_count
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 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.4 中,validate_password
插件被重新实现为 validate_password
组件。 validate_password
插件已弃用;预计将在 MySQL 的未来版本中将其删除。因此,其选项也已弃用,并且您应该期望它们也被删除。使用插件的 MySQL 安装应该过渡到使用该组件。参见 第 8.4.3.3 节,“过渡到密码验证组件”。
要控制 validate_password
插件的激活,请使用以下选项
-
命令行格式 --validate-password[=value]
类型 枚举 默认值 ON
有效值 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.4 中,validate_password
插件被重新实现为 validate_password
组件。 validate_password
插件已弃用;预计将在 MySQL 的未来版本中将其删除。因此,其系统变量也已弃用,并且您应该期望它们也被删除。请改用 validate_password
组件的相应系统变量;参见 密码验证组件系统变量。使用插件的 MySQL 安装应该过渡到使用该组件。参见 第 8.4.3.3 节,“过渡到密码验证组件”。
validate_password_check_user_name
命令行格式 --validate-password-check-user-name[={OFF|ON}]
系统变量 validate_password_check_user_name
范围 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中将其删除。请改用validate_password
组件的相应validate_password.check_user_name
系统变量。validate_password_dictionary_file
命令行格式 --validate-password-dictionary-file=file_name
系统变量 validate_password_dictionary_file
范围 全局 动态 是 SET_VAR
提示适用否 类型 文件名 此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.dictionary_file
系统变量。-
命令行格式 --validate-password-length=#
系统变量 validate_password_length
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8
最小值 0
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.length
系统变量。 validate_password_mixed_case_count
命令行格式 --validate-password-mixed-case-count=#
系统变量 validate_password_mixed_case_count
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.mixed_case_count
系统变量。validate_password_number_count
命令行格式 --validate-password-number-count=#
系统变量 validate_password_number_count
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.number_count
系统变量。-
命令行格式 --validate-password-policy=value
系统变量 validate_password_policy
范围 全局 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 1
有效值 0
1
2
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.policy
系统变量。 validate_password_special_char_count
命令行格式 --validate-password-special-char-count=#
系统变量 validate_password_special_char_count
范围 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
此
validate_password
插件系统变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.special_char_count
系统变量。
在 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
组件的对应validate_password.dictionary_file_last_parsed
状态变量。validate_password_dictionary_file_words_count
此
validate_password
插件状态变量已弃用;预计将在 MySQL 的未来版本中删除。请改用validate_password
组件的对应validate_password.dictionary_file_words_count
状态变量。