跳到主要内容

登录失败处理

对于多次登录失败的用户,seekdb 会锁定该用户,以便防止恶意的密码攻击,从而保护数据库,提升数据库的安全性。

登录失败处理策略

seekdb 通过配置项 connection_control_failed_connections_threshold 来控制用户错误登录尝试的阈值,当用户连续错误登录次数超过该配置项定义的值之后,系统会对账户进行锁定。

connection_control_failed_connections_threshold 配置项用于指定用户错误登录尝试的阈值,默认值为 0,取值范围为 [0,2147483647]。 其中:

  • 当取值为 0 时,表示关闭该功能,即不对用户的错误登录尝试进行处理。

  • 当取值为非 0 值时,待用户错误登录次数超过指定的值后,系统会对账户进行锁定,具体锁定时间通过以下公式来计算:

    MIN(MAX((current_failed_login_num + 1 - connection_control_failed_connections_threshold) * 1000, connection_control_min_connection_delay), connection_control_max_connection_delay)

    其中:

    • current_failed_login_num 表示用户当前连续错误登录的次数,且 current_failed_login_num 大于或等于 connection_control_failed_connections_threshold

    • 配置项 connection_control_min_connection_delay 用于指定超过连续错误登录次数阈值之后锁定时长的最小值,取值范围为 [1000,2147483647],默认值为 1000,单位为毫秒。

      关于配置项 connection_control_min_connection_delay 的更多信息,参见 connection_control_min_connection_delay

    • 配置项 connection_control_max_connection_delay 用于指定超过连续错误登录次数阈值之后锁定时长的最大值,取值范围为 [1000,2147483647],默认值为 2147483647,单位为毫秒。

      关于配置项 connection_control_max_connection_delay 的更多信息,参见 connection_control_max_connection_delay

配置示例

  1. 使用 root 用户登录到 seekdb。

    mysql -h127.0.0.1 -uroot -P2881
  2. 执行以下语句,设置用户的错误登录次数为 5 次。指定了超过错误登录次数之后,错误登录锁定的最小时长为 60000 毫秒,错误登录锁定的最大时长为 360000 毫秒。

    示例如下:

    ALTER SYSTEM SET connection_control_failed_connections_threshold=5;

    ALTER SYSTEM SET connection_control_min_connection_delay=60000;

    ALTER SYSTEM SET connection_control_max_connection_delay=360000;

    配置项相关的详细设置及说明请参见 修改配置项

  3. 创建登录用户。

    CREATE USER 'test' IDENTIFIED BY '*******';
    Query OK, 0 rows affected (0.04 sec)
  4. 验证登录失败处理策略是否生效。

    当连续输入 5 次错误密码时,用户会被锁定。

    mysql -h127.0.0.1 -uroot -P2881 -p*******;
    ERROR 5039 (01007): User locked

    使用 root 用户登录到 seekdb,查看失败登录信息。

    SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
    +-------------+-----------------+
    | USERHOST | FAILED_ATTEMPTS |
    +-------------+-----------------+
    | 'test'@'%' | 5 |
    +-------------+-----------------+
    1 row in set (0.005 sec)
  5. 执行以下 SQL 语句,解锁用户。

    提示

    解锁用户的操作一般由管理员完成,普通用户如果需要执行锁定和解锁操作,必须具备全局的 ALTER USER 权限。关于查看用户权限和授权的相关操作,参见 查看用户权限直接授予权限

       ALTER USER test ACCOUNT UNLOCK;
       Query OK, 0 rows affected (0.03 sec)