文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  密码验证组件

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(强)的整数。

注意

对于分配或修改帐户密码的语句(ALTER USERCREATE USERSET PASSWORD),此处描述的 validate_password 功能仅适用于使用将凭据存储在 MySQL 内部进行身份验证的插件的帐户。对于使用针对 MySQL 外部凭据系统执行身份验证的插件的帐户,密码管理也必须针对该系统在外部进行处理。有关内部凭据存储的更多信息,请参阅 第 8.2.15 节“密码管理”

上述限制不适用于使用 VALIDATE_PASSWORD_STRENGTH() 函数的情况,因为它不会直接影响帐户。

示例

  • validate_password 会检查以下语句中的明文密码。在默认密码策略下,该策略要求密码长度至少为 8 个字符,该密码较弱,并且该语句会产生错误。

    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 sha256_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 系统变量,该变量默认情况下处于启用状态。