Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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功能的描述在这里只适用于使用 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.xxx的系统变量,这些变量控制密码策略。见第8.4.3.2节,“密码验证选项和变量”

如果validate_password未安装,validate_password.xxx系统变量不可用,密码语句不被检查,VALIDATE_PASSWORD_STRENGTH()函数总是返回0。例如,在未安装插件时,账户可以分配短于8个字符的密码或无密码。

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

此外,validate_password支持拒绝当前会话的有效用户帐户用户名部分匹配的密码。要控制此功能,validate_password暴露了validate_password.check_user_name系统变量,该变量默认启用。