权限控制 #
权限分级 #
授权项 | SELECT | INSERT | UPDATE | DELETE | CREATE | DROP | ALTER | INDEX | CREATE_USER | SUPER |
---|---|---|---|---|---|---|---|---|---|---|
全局权限 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
对象权限/库 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | / | / |
对象权限/表 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | / | / |
对象权限/列 | ✔️ | ✔️ | ✔️ | / | / | / | / | / | / | / |
全局权限 #
全局权限,是指用户获得的授权不区分目标对象,用户可对任意的逻辑库、逻辑表执行对应操作。
例如,以下指令将全局的 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'@'%';