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

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

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

该组件实现了两个功能:

  • 在分配作为明文值提供的密码的语句中,组件根据当前密码策略检查密码,如果密码较弱则拒绝密码。这会影响ALTER USERCREATE USERSET PASSWORD语句。

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

validate_password组件提供三个级别的密码检查:LOWMEDIUMSTRONG。默认是MEDIUM; 由 validate_password.policy系统变量控制。这些政策实施越来越严格的密码测试。

此外,该validate_password组件可以拒绝与当前会话的有效用户帐户的用户名部分相匹配的密码,正向或反向。为了提供对此功能的控制, validate_password公开了一个 validate_password.check_user_name 默认启用的系统变量。

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

  1. 确保validate_password组件库文件位于 MySQL 插件目录中。

    $> cd /path/to/mysql/lib/plugin/
    $> ls component_v*
    component_validate_password.so

    确保plugin_dir设置为服务器的 MySQL 插件目录。

    mysql> SELECT @@plugin_dir;
    +--------------------------------------------+
    | @@plugin_dir                               |
    +--------------------------------------------+
    | /path/to/mysql/lib/plugin/                 |
    +--------------------------------------------+

    使用语句 安装validate_password组件:INSTALL COMPONENT

    mysql> INSTALL COMPONENT 'file://component_validate_password';

    组件安装是一次性操作,不需要在每次服务器启动时都完成。INSTALL COMPONENT加载组件,并将其注册到mysql.component系统表中,以便在后续服务器启动期间加载它。

  2. [mysqld]在 MySQL 配置文件 ( ) 的选项组下添加这些选项,/etc/my.cnf以便您可以根据需要进行调整。此部署中使用默认值。

    validate_password.policy=1
    validate_password.length=8
    validate_password.number_count=1
    validate_password.mixed_case_count=1
    validate_password.special_char_count=1
    validate_password.check_user_name=1
    • validate_password.policy=1

      由 强制执行的密码策略 validate_password。值为 1 是 MEDIUM。默认情况下, MEDIUM策略指定密码长度必须至少为 8 个字符,至少包含 1 个数字字符、1 个小写字符、1 个大写字符和 1 个特殊(非字母数字)字符。1 ( MEDIUM) 是默认设置。

    • validate_password.length=8

      validate_password要求密码具有 的最少字符数 。

    • validate_password.number_count=1

      validate_password如果密码策略为 MEDIUM或更强 ,则要求密码具有 的最小小写和大写字符数。

    • validate_password.mixed_case_count=1

      validate_password如果密码策略为MEDIUM 或更强 ,则要求密码具有 的最小数字(数字)字符数 。

    • validate_password.special_char_count=1

      validate_password如果密码策略为MEDIUM 或更强 ,则要求密码具有 的最小非字母数字字符数 。

    • validate_password.check_user_name=1

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

    笔记

    validate_password.dictionary_file 未在此部署中使用。默认情况下,此变量具有空值并且不执行字典检查。对于密码检查时要使用的字典文件,密码策略必须设置为2(STRONG);有关详细信息,请参阅 validate_password.policy 系统变量的描述。

  3. 要验证组件安装,请查询 mysql.component表:

    $> cd /usr/local/mysql 
    $> bin/mysqladmin -u root -p version
    Enter password: (enter root password here)
    mysql> SELECT * FROM mysql.component;
    +--------------+--------------------+------------------------------------+
    | component_id | component_group_id | component_urn                      |
    +--------------+--------------------+------------------------------------+
    |            1 |                  1 | file://component_validate_password |
    +--------------+--------------------+------------------------------------+
  4. 要验证密码验证组件是否有效,请尝试使用不合规的密码创建用户:

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

组件实施的策略validate_password 对生成的密码没有影响。策略的目的validate_password是帮助人们创建更好的密码。

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