Logo
权限控制

权限控制 #

权限分级 #

授权项SELECTINSERTUPDATEDELETECREATEDROPALTERINDEXCREATE_USERSUPER
全局权限✔️✔️✔️✔️✔️✔️✔️✔️✔️✔️
对象权限/库✔️✔️✔️✔️✔️✔️✔️✔️//
对象权限/表✔️✔️✔️✔️✔️✔️✔️✔️//
对象权限/列✔️✔️✔️///////

全局权限 #

全局权限,是指用户获得的授权不区分目标对象,用户可对任意的逻辑库、逻辑表执行对应操作。

例如,以下指令将全局的 INSERT、SELECT、UPDATE 和 DELETE 权限赋予用户 ‘sharding’@'%',则该用户能够对任何逻辑库中的表执行 DML 操作。

-- 以下两个语句等效
GRANT DIST INSERT,SELECT,UPDATE,DELETE TO 'sharding'@'%';
GRANT DIST INSERT,SELECT,UPDATE,DELETE TO sharding;

需要注意的是,全局权限包含两项特殊权限:CREATE_USER 和 SUPER。

其中,获得 CREATE_USER 授权的用户,可执行以下操作:

操作说明
CREATE USER创建用户
ALTER USER修改用户
DROP USER删除用户
CREATE ROLE创建角色
DROP ROLE删除角色
REVOKE ALL PRIVILEGES撤销用户或角色的全部授权

SUPER 代表的是数据库系统的最高权限,默认情况下,ShardingSphere 启动前配置的初始用户拥有 SUPER 授权。

对象权限 #

对象权限,指授予的权限受作用范围限制,用户不可在授权范围之外执行相应操作。

对象权限的作用范围可以是所有逻辑库,也可以指定单个或多个逻辑库及库中的表和列。

例如,以下指令将逻辑库 sharding_db 中 t_order 表的所有权限授予用户 ‘sharding’@'%',此后该用户可以对 sharding_db.t_order 表执行操作。但若无额外授权,该用户不能操作 sharding_db 中的其它表。

GRANT DIST ALL ON sharding_db.t_order TO sharding;

DistSQL 清单 #

完整的权限管理 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 SELECT TP ‘user’@‘host’;GRANT DIST SELECT TO ‘sharding’@'%';
赋予权限(所有对象)GRANT DIST privileges ON . to ‘user’@‘host’;GRANT DIST SELECT, INSERT ON . TO ‘sharding’@'%';
赋予权限(库级)GRANT DIST privileges ON schema.* to ‘user’@‘host’;GRANT DIST SELECT, INSERT ON sharding_db.* TO ‘sharding’@'%';
赋予权限(表级)GRANT DIST privileges ON schema.table to ‘user’@‘host’;GRANT DIST SELECT, INSERT ON sharding_db.t_order TO ‘sharding’@'%';
赋予权限(列级)GRANT DIST privileges ON schema.table to ‘user’@‘host’;GRANT DIST SELECT (order_id), SELECT (user_id, status) ON sharding_db. t_order TO ‘sharding’@'%';
撤销所有权限REVOKE DIST ALL FROM ‘user’@‘host’;REVOKE DIST ALL FROM ‘sharding’@'%';
撤销全局权限REVOKE DIST privileges FROM ‘user’@‘host’;REVOKE DIST SELECT FROM ‘sharding’@'%';
撤销权限(所有对象)REVOKE DIST privileges ON . FROM ‘user’@‘host’;REVOKE DIST SELECT ON . FROM ‘sharding’@'%';
撤销权限(库级)REVOKE DIST privileges ON schema.* FROM ‘user’@‘host’;REVOKE DIST INSERT ON sharding_db.* FROM ‘sharding’@'%';
撤销权限(表级)REVOKE DIST privileges ON schema.table FROM ‘user’@‘host’;REVOKE DIST INSERT ON sharding_db.t_order FROM ‘sharding’@'%';
撤销权限(列级)REVOKE DIST privileges ON schema.table FROM ‘user’@‘host’;REVOKE DIST SELECT (order_id), SELECT (user_id, status) ON sharding_db.t_order FROM ‘sharding’@'%';
查看用户权限SHOW DIST GRANTS FOR ‘user’@‘host’;SHOW DIST GRANTS FOR ‘sharding’@'%';
刷新授权FLUSH DIST PRIVILEGES;FLUSH DIST PRIVILEGES;

说明:

  • 为用户和角色「授权/撤销授权」的语法一致,将 ‘user’@‘host’ 替换为 role 即可;
  • REVOKE DIST ALL 会同时撤销赋予给用户的所有角色。

权限控制的配置 #

用于配置登录计算节点的初始用户,和存储节点数据授权。

配置示例 #

authority:
  users:
    - user: root@%
      password: root
  privilege:
    type: SphereEx:PERMITTED

用户管理 #

初始用户管理 #

初始用户由管理员在 DBPlusEngine 启动前指定。

普通用户管理 #

创建用户 #

CREATE DIST USER 语句用于创建带有指定密码的新用户。

在 DBPlusEngine 中,用户是由用户名和用户名所连接主机的组合。

示例:

  • 创建一个名为 ‘sharding’ 的用户,密码为 ‘123456’,'%’ 表示不限制登录主机。
CREATE DIST USER 'sharding'@'%' IDENTIFIED BY '123456';
  • 创建一个只能在 127.0.0.1 登录的用户。
CREATE DIST USER 'sharding'@'127.0.0.1' IDENTIFIED BY '123456';

修改用户 #

ALTER DIST USER 语句用于修改已有用户,目前只支持修改密码。

示例:

  • 将 ‘sharding’@'%’ 的用户的密码改为 ‘sharding’。
ALTER DIST USER 'sharding'@'%' IDENTIFIED BY 'sharding';

删除用户 #

DROP DIST USER 语句用于删除用户。

示例:

  • 将 ‘sharding’@'%’ 的用户从系统中移除。
DROP DIST USER 'sharding'@'%';

查看用户列表 #

SHOW DIST USERS 语句用于查看用户列表。

示例:

  • 查看全部用户,仅查询授权主机和用户名,不展示用户密码。
SHOW DIST USERS;

角色管理 #

创建角色 #

CREATE DIST ROLE 语句用于创建角色。

示例:

  • 创建一个名为 ‘dml_only’ 的角色。
CREATE DIST ROLE dml_only;

删除角色 #

DROP DIST ROLE 语句用于删除角色。

示例:

  • 将 ‘dml_only’ 的用户从系统中移除。
DROP DIST ROLE dml_only;

查看角色列表 #

SHOW DIST ROLES 语句用于查看角色列表。

示例:

  • 查看已创建的全部角色名称。
SHOW DIST ROLES;

权限管理 #

授权 #

GRANT DIST privileges 语句用于向用户或角色授权。

示例:

  • 将全局 SELECT 权限授予用户 ‘sharding’@'%'。
GRANT DIST SELECT TO 'sharding'@'%';
  • 将逻辑库 sharding_db 的 SELECT 和 INSERT 权限授予用户 ‘sharding’@'%'。
GRANT DIST SELECT, INSERT ON sharding_db.* TO 'sharding'@'%';
  • 将逻辑表 sharding_db.t_order 的 SELECT 和 INSERT 权限授予用户 ‘sharding’@'%'。
GRANT DIST SELECT, INSERT ON sharding_db.t_order TO 'sharding'@'%';
  • 将逻辑表 sharding_db.t_order 中指定列的 SELECT 权限授予用户 ‘sharding’@'%'。
GRANT DIST SELECT (order_id), SELECT (user_id, status) ON sharding_db.t_order TO 'sharding'@'%';
  • 将全局 SELECT、INSERT、UPDATE 和 DELETE 权限赋予给角色 dml_only。
GRANT DIST INSERT,SELECT,UPDATE,DELETE TO dml_only;
  • 将角色 dml_only 赋予给用户 ‘sharding’@'%'。
GRANT DIST dml_only TO 'sharding'@'%';

撤销授权 #

REVOKE DIST privileges 语句用于撤销对用户或角色的授权。

示例:

  • 撤销用户 ‘sharding’@'%’ 的全局 SELECT 授权。
REVOKE DIST SELECT FROM 'sharding'@'%';
  • 撤销用户 ‘sharding’@'%’ 在逻辑库 sharding_db 的 SELECT 和 INSERT 授权。
REVOKE DIST SELECT, INSERT ON sharding_db.* FROM 'sharding'@'%';
  • 撤销用户 ‘sharding’@'%’ 在逻辑辑表 sharding_db.t_order 的 SELECT 和 INSERT 授权。
REVOKE DIST SELECT, INSERT ON sharding_db.t_order FROM 'sharding'@'%';
  • 撤销用户 ‘sharding’@'%’ 在逻辑表 sharding_db.t_order 中指定列的 SELECT 授权。
REVOKE DIST SELECT (order_id), SELECT (user_id, status) ON sharding_db.t_order FROM 'sharding'@'%';
  • 撤销角色 dml_only 的全局 SELECT、INSERT、UPDATE 和 DELETE 授权。
REVOKE DIST INSERT,SELECT,UPDATE,DELETE FROM dml_only;
  • 撤销赋予用户 ‘sharding’@'%’ 的 dml_only 角色。
REVOKE DIST dml_only FROM 'sharding'@'%';

相关参考 #

权限控制