跳到主要内容

密码复杂度

为了防止恶意的密码攻击,seekdb 用户可以根据需要设置密码的复杂度函数,验证用户登录身份,来提升数据库的安全性。本文介绍如何设置 seekdb 登录用户的密码复杂度。

相关变量介绍

seekdb 中,用户可以通过设置一系列系统变量规定密码复杂度规则。创建用户或修改用户的密码时会根据系统变量的配置对密码进行校验,未通过校验则会报错。涉及的系统变量如下表所示:

变量名功能使用说明
validate_password_check_user_name检查用户密码是否可以和用户名相同。
  • on :表示用户密码不可以和用户名相同。
  • off :表示用户密码可以和用户名相同。默认值为 off
validate_password_length设置用户密码最小长度。默认值为 0。
validate_password_mixed_case_count设置用户密码至少包含的大写字母和小写字母个数。默认值为 0。
validate_password_number_count设置用户密码至少包含的数字个数。默认值为 0。
validate_password_policy设置密码检查策略。
  • low:表示仅包含密码长度检测。
  • medium:表示包括密码长度检测、大写字母个数检测、小写字母个数检测、数字个数检测、特殊字符个数检测、用户名密码是否相同检测。
validate_password_special_char_count用户密码至少包含的特殊字符个数。默认值为 0。

设置密码的复杂度

提示

生产环境建议设置密码长度为 20 位,包括数字、大写字母、小写字母以及特殊字符。密码的复杂度越低,其被破解的可能性就越大,比如包含用户名、使用重复字符等。出于安全性考虑,需确保用户的密码具有较高的复杂度。

本节以设置密码复杂度规则为最小长度为 8 个字符,至少包含 3 个大写字母、3 个小写字母和 1 个特殊字符、用户密码不可以与用户名相同并且检查策略为 medium 为例,提供设置密码复杂度的操作指导。

  1. 使用 root 用户登录 seekdb。

    mysql -h127.0.0.1 -uroot -P2881
  2. 通过系统变量设置密码的复杂度。

    SET GLOBAL validate_password_check_user_name=on;
    SET GLOBAL validate_password_length=8;
    SET GLOBAL validate_password_mixed_case_count=3;
    SET GLOBAL validate_password_special_char_count=1;
    SET GLOBAL validate_password_policy='medium';
  3. 退出后重新登录,确认变量是否生效。

    SHOW VARIABLES LIKE 'validate%';
    +--------------------------------------+--------+
    +--------------------------------------+--------+
    | VARIABLE_NAME | VALUE |
    +--------------------------------------+--------+
    | validate_password_check_user_name | off |
    | validate_password_length | 8 |
    | validate_password_mixed_case_count | 3 |
    | validate_password_number_count | 0 |
    | validate_password_policy | medium |
    | validate_password_special_char_count | 1 |
    +--------------------------------------+--------+
    6 rows in set (0.00 sec)
  4. 验证密码复杂度。

    创建两个用户,分别设置为符合要求的密码和不符合要求的密码。

    CREATE USER sectest1 IDENTIFIED BY '******';
    ERROR 1819 (HY000): Your password does not satisfy the current policy
    requirements
    CREATE USER sectest1 IDENTIFIED BY '***1_%';
    Query OK, 0 rows affected

    如果设置的密码复杂度不符合要求,则用户创建失败。