DistSQL 权限控制 #
权限分级 #
DistSQL 权限的分级与标准数据库权限类似,同样拥有全局权限、库级对象权限、表级对象权限。目前 DistSQL 不存在列级操作,因此权限分级中也没有列级权限。
DistSQL 权限的授权项相较于标准的数据库权限种类更多。DistSQL 权限授权项由 操作 + 操作对象 组成,其组合方式如下。
CREATE | ALTER | DROP | SHOW | |
---|---|---|---|---|
RESOURCE | ✔️ | ✔️ | ✔️ | ✔️ |
SHARDING | ✔️ | ✔️ | ✔️ | ✔️ |
READWRITE_SPLITTING | ✔️ | ✔️ | ✔️ | ✔️ |
ENCRYPT | ✔️ | ✔️ | ✔️ | ✔️ |
DB_DISCOVERY | ✔️ | ✔️ | ✔️ | ✔️ |
SHADOW | ✔️ | ✔️ | ✔️ | ✔️ |
SINGLE_TABLE | ✔️ | ✔️ | ✔️ | ✔️ |
除了上述表格中展示的授权项,还提供 RDL、RQL 以及 RAL 语法类型作为授权项。
全局权限 #
全局权限,是指用户获得的授权不区分目标对象,用户可对任意的逻辑库、逻辑表执行对应操作。
例如,以下指令将全局的 SHOW SHARDING 权限赋予用户 ‘sharding’@'%',则该用户能够对任何逻辑库中的分片规则执行 SHOW 操作。
GRANT DIST SHOW SHARDING TO 'sharding'@'%';
另外,因为 DistSQL 授权项较多,对于一次授予多个授权项时,可以使用语法类型作为授权项。例如,以下指令将所有操作对象全局的 SHOW 权限赋予用户 ‘sharding’@'%',则该用户能够对任何逻辑库中的任何操作对象执行 SHOW 操作。
GRANT DIST RQL SHARDING TO 'sharding'@'%';
对象权限 #
对象权限,指授予的权限受作用范围限制,用户不可在授权范围之外执行相应操作。
对象权限的作用范围可以是所有逻辑库,也可以指定单个或多个逻辑库及库中的表。
例如,以下指令将逻辑库 sharding_db 中分片规则 t_order 的创建和修改权限授予用户 ‘sharding’@'%',此后该用户可以对 sharding_db.t_order 规则执行创建和修改操作。但若无额外授权,该用户不能操作 sharding_db 中的其它规则。
GRANT DIST CREATE SHARDING, ALTER SHARDING ON sharding_db.t_order TO 'sharding'@'%';
DistSQL 清单 #
描述 | 语法 | 示例 |
---|---|---|
创建用户 | CREATE DIST USER ‘user’@‘host’ IDENTIFIED BY ‘password’; | CREATE DIST USER ‘sharding’@'%’ IDENTIFIED BY ‘123456’; |
修改用户密码 | ALTER DIST USER ‘user’@‘host’ IDENTIFIED BY ‘password’; | ALTER DIST USER ‘sharding’@'%’ IDENTIFIED BY ‘sharding’; |
删除用户 | DROP DIST USER ‘user’@‘host’; | DROP DIST USER ‘sharding’@'%'; |
创建角色 | CREATE DIST ROLE role; | CREATE DIST ROLE admin; |
删除角色 | DROP DIST ROLE role; | DROP DIST ROLE admin; |
赋予用户角色 | GRANT DIST role TO ‘user’@‘host’; | GRANT DIST admin TO ‘sharding’@'%'; |
取消用户角色 | REVOKE DIST role FROM ‘user’@‘host’; | REVOKE DIST admin FROM ‘sharding’@'%'; |
赋予全局权限 | GRANT DIST privileges TO ‘user’@‘host’; | GRANT DIST CREATE SHARDING TO ‘sharding’@'%'; |
赋予权限(所有对象) | GRANT DIST privileges ON . to ‘user’@‘host’; | GRANT DIST CREATE SHARDING, SHOW SHARDING ON . TO ‘sharding’@'%'; |
赋予权限(库级) | GRANT DIST privileges ON schema.* to ‘user’@‘host’; | GRANT DIST CREATE SHARDING, SHOW SHARDING ON sharding_db.* TO ‘sharding’@'%'; |
赋予权限(表级) | GRANT DIST privileges ON schema.table to ‘user’@‘host’; | GRANT DIST CREATE SHARDING, SHOW SHARDING ON sharding_db.t_order TO ‘sharding’@'%'; |
撤销全局权限 | REVOKE DIST privileges FROM ‘user’@‘host’; | REVOKE DIST SHOW SHARDING FROM ‘sharding’@'%'; |
撤销权限(所有对象) | REVOKE DIST privileges ON . FROM ‘user’@‘host’; | REVOKE DIST SHOW SHARDING ON . FROM ‘sharding’@'%'; |
撤销权限(库级) | REVOKE DIST privileges ON schema.* FROM ‘user’@‘host’; | REVOKE DIST CREATE SHARDING ON sharding_db.* FROM ‘sharding’@'%'; |
撤销权限(表级) | REVOKE DIST privileges ON schema.table FROM ‘user’@‘host’; | REVOKE DIST CREATE SHARDING ON sharding_db.t_order FROM ‘sharding’@'%'; |
查看用户权限 | SHOW DIST GRANTS FOR ‘user’@‘host’; | SHOW DIST GRANTS FOR ‘sharding’@'%'; |
刷新授权 | FLUSH DIST PRIVILEGES; | FLUSH DIST PRIVILEGES; |
使用语法类型作为授权项的 DistSQL 清单如下:
描述 | 语法 | 示例 |
---|---|---|
赋予全局权限 | GRANT DIST privileges TO ‘user’@‘host’; | GRANT DIST RAL, RDL TO ‘sharding’@'%'; |
撤销全局权限 | REVOKE DIST privileges FROM ‘user’@‘host’; | REVOKE DIST RAL, RDL FROM ‘sharding’@'%'; |
说明:
- 为用户和角色「授权/撤销授权」的语法一致,将 ‘user’@‘host’ 替换为 role 即可;
- REVOKE DIST ALL 会同时撤销赋予给用户的所有角色。