8.4.3 密码验证组件
validate_password 组件旨在提高安全性,要求帐户密码,并启用密码强度测试。这组件公开系统变量,以便配置密码策略,并监控组件状态变量。
validate_password 组件实现了以下功能:
-
对于将明文密码分配给 SQL 语句的语句,
validate_password检查密码是否符合当前密码策略,如果密码弱(语句返回一个ER_NOT_VALID_PASSWORD错误)。这适用于ALTER USER、CREATE USER和SET PASSWORD语句。 -
对于
CREATE USER语句,validate_password需要指定密码,并且该密码必须满足密码策略。即使帐户最初被锁定,因为否则在将来解锁帐户时将使其变得可访问,而不需要满足策略的密码。 -
validate_password实现了VALIDATE_PASSWORD_STRENGTH()SQL 函数,该函数评估潜在密码的强度。该函数接受密码参数,并返回一个从0(弱)到100(强)的整数。
对修改或修改帐户密码的语句(ALTER USER、CREATE USER和SET PASSWORD),validate_password功能的描述在这里只适用于使用 MySQL 内部存储凭证的账户。对于使用外部系统进行身份验证的账户,密码管理需要在该系统中进行。关于 MySQL 内部凭证存储的更多信息,请见第8.2.15节,“密码管理”。
前述限制不适用于使用VALIDATE_PASSWORD_STRENGTH()函数,因为它不直接影响账户。
示例:
-
validate_password检查明文密码在以下语句中。根据默认密码策略,该密码太弱,语句产生错误:mysql> ALTER USER USER() IDENTIFIED BY 'abc'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements -
指定的哈希值密码不被检查,因为原始密码值不可用于检查:
mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; Query OK, 0 rows affected (0.01 sec) -
这个账户创建语句失败,即使账户初始锁定,因为它不包括满足当前密码策略的密码:
mysql> CREATE USER 'juanita'@'localhost' ACCOUNT LOCK; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements -
要检查密码,请使用
VALIDATE_PASSWORD_STRENGTH()函数:mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak'); +------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('weak') | +------------------------------------+ | 25 | +------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('lessweak$_@123'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('lessweak$_@123') | +----------------------------------------------+ | 50 | +----------------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!') | +----------------------------------------------+ | 100 | +----------------------------------------------+
要配置密码检查,请修改名为validate_password.的系统变量,这些变量控制密码策略。见第8.4.3.2节,“密码验证选项和变量”。xxx
如果validate_password未安装,validate_password.系统变量不可用,密码语句不被检查,xxxVALIDATE_PASSWORD_STRENGTH()函数总是返回0。例如,在未安装插件时,账户可以分配短于8个字符的密码或无密码。
假设validate_password已安装,它实现了三个密码检查级别:LOW、MEDIUM和STRONG。默认是MEDIUM;要更改,请修改validate_password.policy的值。策略实现逐渐严格的密码测试。以下描述引用默认参数值,可以通过更改相应的系统变量进行修改。
-
LOW策略仅测试密码长度。密码必须至少8个字符长。要修改长度,请修改validate_password.length。 -
MEDIUM策略添加了条件:密码必须包含至少1个数字字符、1个小写字符、1个大写字符和1个特殊字符(非字母数字字符)。要修改这些值,请修改validate_password.number_count、validate_password.mixed_case_count和validate_password.special_char_count。 -
STRONG策略添加了条件:密码子串长度4或更长不能与词典文件中的单词匹配,如果指定了词典文件。要指定词典文件,请修改validate_password.dictionary_file。
此外,validate_password支持拒绝当前会话的有效用户帐户用户名部分匹配的密码。要控制此功能,validate_password暴露了validate_password.check_user_name系统变量,该变量默认启用。