TiDB管理
一、用户权限管理
1、权限管理
权限相关的数据表
mysql.user:用户账户,全局权限
user
表的权限是全局的,并且不管默认数据库是哪一个。比如user
里面有DELETE
权限,任何一行,任何的表,任何的数据库。User+Host
可能会匹配user
表里面多行,为了处理这种情况,user
表的行是排序过的,客户端连接时会依次去匹配,并使用首次匹配到的那一行做权限验证。排序是按Host
在前,User
在后。
mysql.db:数据库级别的权限
db
表里面,User 为空是匹配匿名用户,User 里面不能有通配符。Host 和 Db 列里面可以有%
和_
,可以模式匹配。mysql.tables_priv:表级别的权限
tables_priv
和columns_priv
中使用%
是类似的,但是在Db
,Table_name
,Column_name
这些列不能包含%
。加载进来时排序也是类似的。mysql.columns_priv:列级别的权限,当前暂不支持
权限生效时机
- TiDB 启动时,将一些权限检查的表加载到内存,之后使用缓存的数据来验证权限。系统会周期性的将授权表从数据库同步到缓存,生效则是由同步的周期决定,目前这个值设定的是 5 分钟。
- 如果授权表已被直接修改,则不会通知 TiDB 节点更新缓存,如果需要立即生效,可以手动执行
FLUSH PRIVILEGES;