TiDB 用户账户管理

用户名和密码
TiDB 将用户账户存储在 mysql.user 系统表里面。每个账户由用户名和 host 作为标识。每个账户可以设置一个密码。每个用户名最长为 32 个字符。

通过 MySQL 客户端连接到 TiDB 服务器,通过指定的账户和密码登录:

mysql --port 4000 --user xxx --password


设置密码
TiDB 将密码存在 mysql.user 系统表里面。只有拥有 CREATE USER 权限,或者拥有 mysql 数据库权限(INSERT 权限用于创建,UPDATE 权限用于更新)的用户才能够设置或修改密码。

在 CREATE USER 创建用户时通过 IDENTIFIED BY 指定密码:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'mypass';
为一个已存在的账户修改密码,可以通过 SET PASSWORD FOR 或者 ALTER USER 语句完成:

SET PASSWORD FOR 'root'@'%' = 'xxx';
或者:

ALTER USER 'test'@'localhost' IDENTIFIED BY 'mypass';


忘记 root 密码

修改 TiDB 配置文件:

登录其中一台 tidb-server 实例所在的机器。

进入 TiDB 节点的部署目录下的 conf 目录,找到 tidb.toml 配置文件。

在配置文件的 security 部分添加配置项 skip-grant-table。如无 security 部分,则将以下两行内容添加至 tidb.toml 配置文件尾部:

[security]
skip-grant-table = true
终止该 tidb-server 的进程:

查看 tidb-server 的进程:

ps aux | grep tidb-server
找到 tidb-server 对应的进程 ID (PID) 并使用 kill 命令停掉该进程:

kill -9 <pid>
使用修改之后的配置启动 TiDB:

注意
设置 skip-grant-table 之后,启动 TiDB 进程会增加操作系统用户检查,只有操作系统的 root 用户才能启动 TiDB 进程。

进入 TiDB 节点部署目录下的 scripts 目录。

切换到操作系统 root 账号。

在前台执行目录中的 run_tidb.sh 脚本。

在新的终端窗口中使用 root 登录后修改密码:

mysql -h 127.0.0.1 -P 4000 -u root
停止运行 run_tidb.sh 脚本,并去掉第 1 步中在 TiDB 配置文件中添加的内容,等待 tidb-server 自启动。

FLUSH PRIVILEGES
用户以及权限相关的信息都存储在 TiKV 服务器中,TiDB 在进程内部会缓存这些信息。一般通过 CREATE USER、GRANT 等语句来修改相关信息时,可在整个集群迅速生效。如果遇到网络或者其它因素影响,由于 TiDB 会周期性地更新缓存信息,正常情况下,最多 15 分钟左右生效。

如果授权表已被直接修改,则不会通知 TiDB 节点更新缓存,执行 FLUSH PRIVILEGES 可使改动立即生效。

详情参见权限管理。

posted @ 2026-08-12 10:04  黄多鱼  阅读(11)  评论(0)    收藏  举报