Starrocks由两种权限模型构成
基于角色的访问控制 (RBAC: role-based access control):权限通过角色来进行管理,即可以将权限赋予给角色,从而通过角色传递给用户。
基于用户标识的访问控制 (IBAC: identity-based access control):权限可以直接赋予给用户标识。
整体使用如下
其中分为四大模块
- 对象
对象是存在的实体,例如Database 包含在 Catalog 下,Table包含在 Database下
- 权限,
依附于对象之上,每个对象有不同的权限项可以被授权
- 用户
用户由用户登录的 IP(userhost) 和用户名(username)组成,比如username@’userhost’。StarRocks 会将拥有相同用户名,但来自不同 IP 的用户识别为不同的用户标识。ip默认为 ‘%’,即表示从任意 host 连接到 StarRocks 的同名用户。
- 角色
一组权限的集合,用户可以有多个角色,也可以为每个用户设置登录时自动激活的默认角色 (default role),用户也可以在当前会话中手动激活拥有的角色 (active role)。
角色可以被继承,会因为继承所获的父角色的权限
需要注意的是,一个角色的最多继承层数为 16。角色的继承关系不能是双向的,比如将角色 A 赋予给 B,不能同时又把 B 赋予给 A,可能会造成继承关系不清楚。
Starrocks提供了一组默认角色供使用
root:拥有全局权限。root 用户默认拥有 root 角色。
cluster_admin:拥有集群的管理权限。包含对节点的操作权限,如增加、减少节点。
db_admin:拥有数据库的管理权限。
user_admin:拥有用户和角色的管理权限。包含创建用户、角色、赋权等权限。
角色可以设置默认激活,比如SET DEFAULT ROLE 更改自己的默认角色
也可以进行手动激活,SET ROLE 命令来设置当前的激活角色。
那么我们接下来详细讲解下如何管理starrocks这样一个集群
首先我们可以创建用户,示例为
CREATE USER jack@’172.10.1.10′ IDENTIFIED BY ‘12345’ DEFAULT ROLE ‘example_role’;
这样就创建了一个用户
其次是创建角色
CREATE ROLE example_role;
同时可以给角色授予权限
— 赋予角色所有表的查询权限。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only; — 赋予角色所有视图的查询权限。 GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only; — 赋予角色所有物化视图的查询和加速权限。 GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only; |
撤销权限
REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;
角色和用户的绑定
GRANT example_role TO USER jack@’172.10.1.10‘;
撤销角色绑定
REVOKE example_role FROM USER jack@’172.10.1.10‘;
这里推荐在实际使用中,创建一个运维角色绑定系统预置角色 db_admin、user_admin 以及 cluster_admin。
然后给每个运维人员创建一个账号绑定运维角色来进行使用,
对于用户来说,除了最基本的用户名+密码认证方式外,StarRocks 还支持 Lightweight Directory Access Protocol(LDAP)认证。这里先不赘述了,不过给出官方文档
https://docs.starrocks.io/zh-cn/latest/administration/Authentication
最后我们列出一个表格,来对应不同实体可以赋予的权限列表
系统级权限 (SYSTEM)
权限 | 用途 |
NODE | 用于操作节点,比如添加,删除,下线节点。为确保集群安全,此权限不可直接授予给用户和角色。cluster_admin 角色拥有此权限。 |
GRANT | 创建用户/角色,更改用户/角色,将权限授予给用户/角色。此权限不可直接授予给用户和角色。user_admin 角色拥有此权限。 |
CREATE RESOURCE GROUP | 创建资源组。 |
CREATE RESOURCE | 创建资源给 Spark Load 和外表使用。 |
CREATE EXTERNAL CATALOG | 创建 External Catalog。 |
PLUGIN | 安装、卸载一个插件。 |
REPOSITORY | 创建、删除、查看仓库。 |
BLACKLIST | 创建、删除、查看 SQL 黑名单。 |
FILE | 创建、删除、查看文件。 |
OPERATE | 管理副本、配置项、变量、transaction等。 |
CREATE GLOBAL FUNCTION | 创建一个全局 UDF。 |
资源组权限 (RESOURCE GROUP)
权限 | 用途 |
ALTER | 为指定资源组 (resource group) 增加、减少分类器 (classifier)。 |
DROP | 删除指定资源组。 |
ALL | 拥有对该资源组的上述所有权限。 |
全局用户自定义函数权限 (GLOBAL FUNCTION)
权限 | 用途 |
USAGE | 在查询中使用该函数。 |
DROP | 删除该函数。 |
ALL | 拥有对该函数的上述所有所有权限。 |
数据目录权限 (CATALOG)
对象 | 权限 | 用途 |
CATALOG (内部目录,默认名称为 default_catalog) |
USAGE | 使用 internal catalog。 |
CREATE DATABASE | 在 internal catalog 里创建数据库。 | |
ALL | 拥有对 internal catalog 的上述所有权限。 | |
CATALOG (外部目录) | USAGE | 使用 external catalog,查看里面的表。 |
DROP | 删除 external catalog。 | |
ALL | 拥有对该 external catalog 的上述所有权限。 |
数据库权限 (DATABASE)
权限 | 用途 |
ALTER | 设置指定数据库的属性,重命名,设定配额等。 |
DROP | 删除数据库。 |
CREATE TABLE | 在数据库内创建表。 |
CREATE VIEW | 创建视图。 |
CREATE FUNCTION | 创建函数。 |
CREATE MATERIALIZED VIEW | 创建物化视图。 |
ALL | 拥有对该数据库的上述所有权限。 |
表权限 (TABLE)
权限 | 用途 |
ALTER | 对表进行修改,对外表元数据进行刷新。 |
DROP | 删除表。 |
SELECT | 查询表中数据。 |
INSERT | 向 StarRocks 表中导入数据。 |
UPDATE | 更新表。 |
EXPORT | 从 StarRocks 表中导出数据。 |
DELETE | 按条件删除指定表中的数据,或者清空指定表的数据。 |
ALL | 拥有对该表的上述所有权限。 |
视图权限 (VIEW)
权限 | 用途 |
SELECT | 查询视图 (view) 中的数据。 |
ALTER | 修改一个视图的定义。 |
DROP | 删除一个逻辑视图。 |
ALL | 拥有对该视图的上述所有权限。 |
物化视图权限 (MATERIALIZED VIEW)
权限 | 用途 |
SELECT | 查询时引用该物化视图 (materialized view) 的数据,以加速查询。 |
ALTER | 更改物化视图。 |
REFRESH | 刷新物化视图。 |
DROP | 删除物化视图。 |
ALL | 拥有对该物化视图的上述所有权限。 |