MySQL8 中文参考(二十八)(5)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL8 中文参考(二十八)

MySQL8 中文参考(二十八)(4)https://developer.aliyun.com/article/1566115


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
命令行格式 --validate-password.changed-characters-percentage[=value]
引入版本 8.0.34
系统变量 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 USERSET 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=#
系统��量 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
  • validate_password要求密码具有的数字(数字)字符的最小数量,如果密码策略为MEDIUM或更强。除非安装了validate_password,否则此变量不可用。
  • validate_password.policy
命令行格式 --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独立控制的。
    可以使用数值 0、1、2 或相应的符号值LOWMEDIUMSTRONG来指定validate_password.policy的值。以下表格描述了每个策略执行的测试。对于长度测试,所需长度是validate_password.length系统变量的值。类似地,其他测试的所需值由其他validate_password.*xxx*变量给出。
策略 执行的测试
0LOW 长度
1MEDIUM 长度;数字、小写/大写字母和特殊字符
2STRONG 长度;数字、小写/大写字母和特殊字符;字典文件

  • 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.0 中,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告诉服务器在启动时加载插件,并防止在服务器运行时将其移除。
    只有在之前使用INSTALL PLUGIN注册了validate_password插件或者使用--plugin-load-add加载了该插件时,此选项才可用。参见第 8.4.3.1 节,“密码验证组件的安装和卸载”。
密码验证插件系统变量

注意

在 MySQL 8.0 中,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=#
系统变量 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
命令行格式 --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.0 中,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状态变量。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十三)(3)
MySQL8 中文参考(二十三)
48 4
|
4月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
74 3
|
4月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
112 3
|
4月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
46 3
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
65 2
|
4月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
56 2
|
4月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
38 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(1)
MySQL8 中文参考(二十四)
43 2
|
4月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
52 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
31 2