Logo
DistSQL 权限控制

DistSQL 权限控制 #

权限分级 #

DistSQL 权限的分级与标准数据库权限类似,同样拥有全局权限、库级对象权限、表级对象权限。目前 DistSQL 不存在列级操作,因此权限分级中也没有列级权限。

DistSQL 权限的授权项相较于标准的数据库权限种类更多。DistSQL 权限授权项由 操作 + 操作对象 组成,其组合方式如下。

CREATEALTERDROPSHOW
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 会同时撤销赋予给用户的所有角色。