Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The Password Validation Component

8.4.3 密码验证组件

validate_password 组件旨在通过要求账户密码和启用潜在密码强度测试来提高安全性。该组件公开系统变量,以便您配置密码策略,并提供状态变量以监控组件。

validate_password 组件实现以下功能:

  • 对于将密码作为明文值分配的 SQL 语句,validate_password 会检查密码是否符合当前密码策略,如果密码弱则拒绝密码(语句返回 ER_NOT_VALID_PASSWORD 错误)。这适用于 ALTER USERCREATE USERSET PASSWORD 语句。

  • 对于 CREATE USER 语句,validate_password 需要提供密码,并且该密码必须满足密码策略。这甚至适用于账户最初被锁定的情况,因为否则在以后解锁账户时将使其变得可访问,而不需要满足策略的密码。

  • validate_password 实现了一个 VALIDATE_PASSWORD_STRENGTH() SQL 函数,该函数评估潜在密码的强度。该函数采用密码参数,并返回一个从 0(弱)到 100(强)的整数。

Note

对于分配或修改账户密码的语句(ALTER USERCREATE USERSET PASSWORD),validate_password 能力仅适用于使用内部认证插件存储凭据的账户。对于使用外部认证系统的账户,密码管理必须在外部系统中处理。有关内部凭据存储的更多信息,请参阅 第 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.xxx 形式的系统变量;这些是控制密码策略的参数。见 第 8.4.3.2 节,“密码验证选项和变量”

如果 validate_password 未安装,validate_password.xxx 系统变量不可用,语句中的密码不进行检查,并且 VALIDATE_PASSWORD_STRENGTH() 函数始终返回 0。例如,未安装插件时,帐户可以分配少于 8 个字符的密码,或者根本不需要密码。

假设 validate_password 已安装,它实现了三个级别的密码检查:LOWMEDIUMSTRONG。默认为 MEDIUM;要更改此设置,请修改 validate_password.policy 的值。这些策略实施了逐渐严格的密码测试。以下描述引用了默认参数值,这些值可以通过更改相应的系统变量来修改。

此外,validate_password 还支持 capability,拒绝与当前会话的有效用户帐户的用户名部分匹配的密码,或者反之亦然。要控制此 capability,validate_password 暴露了一个 validate_password.check_user_name 系统变量,默认情况下启用该变量。