TiDB 的基于角色的访问控制 (RBAC) 系统的实现类似于 MySQL 8.0 的 RBAC 系统。TiDB 兼容大部分 MySQL RBAC 系统的语法。
本文档主要介绍 TiDB 基于角色的访问控制相关操作及实现。
角色访问控制相关操作
角色是一系列权限的集合。用户可以创建角色、删除角色、将权限赋予角色;也可以将角色授予给其他用户,被授予的用户在启用角色后,可以得到角色所包含的权限。
创建角色
创建角色 app_developer,app_read 和 app_write:
CREATE ROLE 'app_developer', 'app_read', 'app_write';
角色名的格式和规范可以参考 TiDB 用户账户管理。
角色会被保存在 mysql.user
表中,角色名称的主机名部分(如果省略)默认为 '%'
。如果表中有同名角色或用户,角色会创建失败并报错。创建角色的用户需要拥有 CREATE ROLE
或 CREATE USER
权限。
授予角色权限
为角色授予权限和为用户授予权限操作相同,可参考 TiDB 权限管理。
为 app_read
角色授予数据库 app_db
的读权限:
GRANT SELECT ON app_db.* TO 'app_read'@'%';
为 app_write
角色授予数据库 app_db
的写权限:
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write'@'%';
为 app_developer
角色授予 app_db
数据库的全部权限:
GRANT ALL ON app_db.* TO 'app_developer';
将角色授予给用户
假设有一个用户拥有开发者角色,可以对 app_db
的所有操作权限;另外有两个用户拥有 app_db
的只读权限;还有一个用户拥有 app_db
的读写权限。
首先用 CREATE USER
来创建用户。
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass'; CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass'; CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass'; CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
然后使用 GRANT
授予用户对应的角色。
GRANT