MySQL 5.7 安全部署指南  /  第6章安装MySQL密码验证插件

第6章安装MySQL密码验证插件

validate_password插件用于测试密码并提高安全性。该插件公开了一组系统变量,使您能够定义密码策略。

该插件实现了两个功能:

  • 在分配作为明文值提供的密码的语句中,插件根据当前密码策略检查密码,如果它很弱则拒绝它。这会影响 ALTER USERCREATE USERGRANTSET PASSWORD语句。作为函数参数给出的密码 PASSWORD()也会被检查。

  • VALIDATE_PASSWORD_STRENGTH() SQL 函数评估潜在密码的强度 。 该函数接受一个密码参数并返回一个从 0(弱)到 100(强)的整数。

validate_password插件提供三个级别的密码检查:LOWMEDIUMSTRONG。默认是MEDIUM; 由 validate_password_policy 配置选项控制。这些政策实施越来越严格的密码测试。

  • LOW策略仅测试密码长度。密码长度必须至少为 8 个字符。

  • MEDIUM策略添加了密码必须包含至少 1 个数字字符、1 个小写字符、1 个大写字符和 1 个特殊(非字母数字)字符的条件。

  • STRONG策略添加了一个条件,即长度为 4 或更长的密码子字符串不得与字典文件中的单词匹配(如果已指定的话)。

此外,该validate_password插件可以拒绝与当前会话的有效用户帐户的用户名部分匹配的密码,无论是正向还是反向。要启用此功能,您必须启用 validate_password_check_user_name 系统变量。

安装和配置密码验证插件:

  1. [mysqld]在 MySQL 配置文件 ( ) 的选项组下添加这些选项/etc/my.cnf

    plugin-load-add=validate_password.so
    validate-password=FORCE_PLUS_PERMANENT
    validate_password_policy=MEDIUM
    validate_password_check_user_name=1
    • plugin-load-add=validate_password.so

      validate_password.so每次启动服务器时 加载插件库。

    • validate-password=FORCE_PLUS_PERMANENT

      防止服务器在没有密码验证插件的情况下运行,如果插件未成功初始化,则服务器启动失败。

    • validate_password_policy=MEDIUM

      指定密码长度必须至少为 8 个字符,至少包含 1 个数字字符、1 个小写字符、1 个大写字符和 1 个特殊(非字母数字)字符。MEDIUM是默认设置。

    • validate_password_check_user_name=1

      拒绝与当前会话的有效用户帐户的用户名部分相匹配的密码,正向或反向。

  2. 要验证插件安装,请重新启动服务器并检查INFORMATION_SCHEMA.PLUGINS 表或使用以下SHOW PLUGINS 语句:

    $> systemctl restart mysqld
    $> cd /usr/local/mysql 
    $> bin/mysqladmin -u root -p version
    Enter password: (enter root password here)
    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
           FROM INFORMATION_SCHEMA.PLUGINS
           WHERE PLUGIN_NAME LIKE 'validate%';
    +-------------------+---------------+
    | PLUGIN_NAME       | PLUGIN_STATUS |
    +-------------------+---------------+
    | validate_password | ACTIVE        |
    +-------------------+---------------+
  3. 要验证密码验证插件是否有效,请尝试使用不合规的密码创建用户:

    mysql> CREATE USER 'bob.smith'@'localhost' IDENTIFIED BY 'abc';
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

有关密码验证插件的更多信息,请参阅 密码验证插件