本节描述了系统变量和状态变量,这些变量用于
validate_password配置和监控其操作。
如果validate_password启用该组件,它会公开几个启用密码检查配置的系统变量:
mysql> SHOW VARIABLES LIKE 'validate_password.%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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.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 USERor 之类的语句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命令行格式 --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最小值 0validate_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最小值 0validate_password如果密码策略为MEDIUM或更强,则要求密码具有 的最小小写和大写字符数。validate_password除非已安装 ,否则此变量不可用。对于给定的
validate_password.mixed_case_count值,密码必须有那么多小写字符和那么多大写字符。validate_password.number_count命令行格式 --validate-password.number-count=#系统变量 validate_password.number_count范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 1最小值 0validate_password如果密码策略为MEDIUM或更强,则要求密码具有 的最小数字(数字)字符数 。validate_password除非已安装 ,否则此变量不可用 。-
命令行格式 --validate-password.policy=value系统变量 validate_password.policy范围 全球的 动态的 是的 SET_VAR提示适用不 类型 枚举 默认值 1有效值 012由 强制执行的密码策略
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最小值 0validate_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.0 中,
validate_password插件被重新实现为validate_password
组件。该validate_password插件已弃用;希望在未来的 MySQL 版本中将其删除。因此,它的选项也被弃用,您应该期望它们也被删除。使用该插件的 MySQL 安装应该改为使用该组件。请参阅
第 6.4.3.3 节,“转换到密码验证组件”。
要控制
validate_password插件的激活,请使用此选项:
-
命令行格式 --validate-password[=value]类型 枚举 默认值 ON有效值 ONOFFFORCEFORCE_PLUS_PERMANENT此选项控制服务器
validate_password在启动时如何加载已弃用的插件。该值应该是可用于插件加载选项的值之一,如 第 5.6.1 节“安装和卸载插件”中所述。例如,--validate-password=FORCE_PLUS_PERMANENT告诉服务器在启动时加载插件并防止它在服务器运行时被删除。此选项仅在
validate_password插件先前已注册INSTALL PLUGIN或加载时可用--plugin-load-add。请参阅 第 6.4.3.1 节,“密码验证组件安装和卸载”。
在 MySQL 8.0 中,
validate_password插件被重新实现为validate_password
组件。该validate_password插件已弃用;希望在未来的 MySQL 版本中将其删除。因此,它的系统变量也被弃用,您应该期望它们也被删除。改用组件对应的系统变量
validate_password;请参阅
密码验证组件系统变量。使用该插件的 MySQL 安装应该改为使用该组件。请参阅
第 6.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.check_user_name系统变量validate_password。validate_password_dictionary_file命令行格式 --validate-password-dictionary-file=file_name系统变量 validate_password_dictionary_file范围 全球的 动态的 是的 SET_VAR提示适用不 类型 文件名 此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.dictionary_file系统变量validate_password。-
命令行格式 --validate-password-length=#系统变量 validate_password_length范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 8最小值 0此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.length系统变量validate_password。 validate_password_mixed_case_count命令行格式 --validate-password-mixed-case-count=#系统变量 validate_password_mixed_case_count范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 1最小值 0此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.mixed_case_count系统变量validate_password。validate_password_number_count命令行格式 --validate-password-number-count=#系统变量 validate_password_number_count范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 1最小值 0此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.number_count系统变量validate_password。-
命令行格式 --validate-password-policy=value系统变量 validate_password_policy范围 全球的 动态的 是的 SET_VAR提示适用不 类型 枚举 默认值 1有效值 012此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.policy系统变量validate_password。 validate_password_special_char_count命令行格式 --validate-password-special-char-count=#系统变量 validate_password_special_char_count范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 1最小值 0此
validate_password插件系统变量已弃用;希望在未来的 MySQL 版本中将其删除。改用组件对应的validate_password.special_char_count系统变量validate_password。
在 MySQL 8.0 中,
validate_password插件被重新实现为validate_password
组件。该validate_password插件已弃用;希望在未来的 MySQL 版本中将其删除。因此,它的状态变量也被弃用了;期望它被删除。使用validate_password
组件对应的状态变量;请参阅
密码验证组件状态变量。使用该插件的 MySQL 安装应该改为使用该组件。请参阅
第 6.4.3.3 节,“转换到密码验证组件”。
validate_password_dictionary_file_last_parsed此
validate_password插件状态变量已弃用;希望在未来的 MySQL 版本中将其删除。而是 使用组件的相应validate_password.dictionary_file_last_parsed状态变量 。validate_passwordvalidate_password_dictionary_file_words_count此
validate_password插件状态变量已弃用;希望在未来的 MySQL 版本中将其删除。而是 使用组件的相应validate_password.dictionary_file_words_count状态变量 。validate_password