客户端欢迎信息显示历史登录信息
历史登录信息功能适合需要审计登录行为、排查异常登录或在客户端快速感知最近一次成功与失败登录情况的场景。例如,管理员可以通过系统表集中查看登录记录,普通用户也可以查询自身的历史登录记录,并在下次成功登录时看到最近一次成功和失败登录信息。
使用场景
- 记录用户登录成功和失败信息,便于事后审计和排查异常访问。
- 在客户端成功登录后显示最近一次成功和失败登录信息,帮助用户识别异常登录尝试。
使用前提与开启方式
历史登录信息功能由全局系统变量 tidb_enable_login_history 控制,默认值为 OFF。
在使用该功能前,先确认并开启该变量:
SHOW GLOBAL VARIABLES LIKE 'tidb_enable_login_history';
SET GLOBAL tidb_enable_login_history = ON;
开启后:
- 登录成功或失败的记录会写入
mysql.login_history。 - 用户后续通过兼容 MySQL 协议并展示欢迎信息的客户端登录时,可以看到最近一次成功和失败登录信息。
关闭该变量后:
- 系统不再写入新的登录历史记录。
- 客户端登录时不再显示历史登录信息。
- 后台也不会继续执行该功能相关的历史记录清理。
功能示例
查询所有用户的历史登录记录
当具备 mysql.login_history 的查询权限时,可以直接查询系统表:
SELECT
Time,
Server_host,
User,
User_host,
DB,
Connection_id,
Result,
Client_host,
Detail
FROM mysql.login_history
ORDER BY Time DESC
LIMIT 10;
mysql.login_history 中保存了登录时间、TiDB 节点地址、登录用户名、认证主机、默认数据库、连接 ID、登录结果、客户端地址以及失败原因等信息。
客户端查看最近一次成功和失败登录信息
开启历史登录信息功能后,用户成功登录时,系统会基于已有历史记录查询最近一次成功和失败登录信息,并将结果附加到客户端欢迎信息中。
示例如下:
$ mysql -uroot -h127.0.0.1 -P4000
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2097160
Server version: 8.0.11-TiDB-v7.x.y TiDB Server (Apache License 2.0) Enterprise Edition, MySQL compatible
[Last Success Login] 2024-01-01 12:00:00 root@10.0.0.1 1.1.1.1 success
[Last Fail Login] 2024-01-01 11:00:00 root@10.0.0.2 2.2.2.2 fail
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
如果当前用户只有最近一次失败记录而没有成功记录,则只显示失败信息;如果当前没有任何历史记录,则不会显示上述标记。
注意事项与限制
- 历史登录信息功能默认关闭;未开启时,系统不会记录新的登录历史,也不会在客户端显示最近一次成功或失败登录信息。
mysql.login_history记录登录成功和失败两类事件;失败记录的错误原因会写入Detail列。- 当前用户成功登录后,系统会先查询已有历史记录,再写入本次成功登录记录。因此客户端显示的是“历史记录”,不包含当前这次登录。
- 如果功能刚开启且当前用户还没有历史记录,则第一次成功登录通常不会显示
[Last Success Login]或[Last Fail Login]标记;本次成功登录写入后,后续登录才可能看到对应信息。