GCDW 用户与权限管理
GCDW 用户与权限管理
一、概述
GCDW(GBase Cloud Data Warehouse)采用基于 RBAC(Role-Based Access Control,基于角色的访问控制) 的权限管理模型。
在GCDW中,用户(User) 不直接拥有权限,而是通过 角色(Role) 获得相应权限。角色之间支持继承关系,形成树状结构,实现权限复用和统一管理。
整个权限体系主要包括以下几个对象:
- Tenant(租户)
- User(用户)
- Role(角色)
- Privilege(权限)
- Owner(对象所有者)
- Warehouse(计算资源)
通过这种设计,可以实现权限集中管理、职责分离以及灵活的权限控制。
二、权限模型
用户、角色与权限关系
GCDW采用典型的RBAC模型:
用户(User)
│
▼
角色(Role)
│
▼
权限(Privilege)
│
▼
数据库对象(Database/Table/View...)
即:
- 用户登录租户实例;
- 用户本身没有任何数据库操作权限;
- 权限全部赋予角色;
- 用户通过拥有角色获得对应权限。
因此,权限管理实际上就是角色管理。
系统内置角色
系统提供三个内置角色。
AccountAdmin
最高管理员。
拥有整个租户最高权限,可以:
- 创建用户
- 创建角色
- 授权
- 回收权限
- 管理所有数据库对象
属于整个角色树的根节点。
SystemAdmin
系统管理员。
除 User、Role 管理之外,拥有其它所有数据库权限。
通常用于数据库日常管理。
PublicAdmin
公共角色。
默认所有用户都会拥有该角色。
该角色默认没有任何权限,仅作为角色树最底层节点存在。
角色关系如下:
AccountAdmin
│
SystemAdmin
│
业务角色A
业务角色B
业务角色C
│
子角色……
│
PublicAdmin
三、角色管理
角色特点
GCDW中的角色具有以下特点:
(1)角色拥有权限
权限不能直接赋给用户。
只能:
权限
↓
角色
↓
用户
(2)用户与角色为多对多关系
一个角色可以赋予多个用户。
一个用户也可以拥有多个角色。
例如:
RoleA
├──User1
├──User2
User3
├──RoleA
├──RoleB
(3)同一时间仅一个角色生效
虽然一个用户可以拥有多个角色。
但是:
执行SQL时,仅当前角色有效。
可通过:
USE ROLE role_name;
切换当前角色。
(4)角色支持继承
角色形成树状结构。
例如:
SystemAdmin
│
r1
┌───┴────┐
r1_1 r1_2
若:
r1_1拥有SELECT
r1_2拥有INSERT
则:
r1拥有:
SELECT
INSERT
父角色自动继承所有子角色权限。
(5)角色树不能形成闭环
官方建议:
整个租户所有角色均应位于同一棵继承树中。
避免:
- 孤立角色
- 多棵继承树
- 循环继承
否则会导致权限管理复杂化。
四、角色管理操作
创建角色
CREATE ROLE role_name;
例如:
CREATE ROLE sales_role;
设置角色继承
GRANT ROLE child_role
TO ROLE parent_role;
例如:
GRANT ROLE sales_role
TO ROLE systemadmin;
表示:
SystemAdmin
│
sales_role
给角色授权
GRANT privilege
ON object
TO ROLE role_name;
例如:
GRANT SELECT
ON testdb.t1
TO ROLE sales_role;
支持:
- ALL
- SELECT
- INSERT
- UPDATE
- DELETE
等各种权限。
回收权限
REVOKE privilege
ON object
FROM ROLE role_name;
例如:
REVOKE SELECT
ON testdb.t1
FROM ROLE sales_role;
删除角色
DROP ROLE role_name;
例如:
DROP ROLE sales_role;
注意:
- 权限同时删除;
- 父角色继承得到的权限也会失效;
- 应及时重新组织继承树。
五、用户管理
创建用户
示例:
CREATE USER user1
IDENTIFIED BY 'password'
DEFAULT_ROLE='r1'
DEFAULT_WAREHOUSE='wh1';
支持设置:
- 默认角色
- 默认Warehouse
- 密码有效期
- 是否锁定账户
PASSWORD EXPIRE INTERVAL 90 DAY
ACCOUNT LOCK
给用户赋角色
GRANT ROLE role_name
TO USER username;
例如:
GRANT ROLE sales_role
TO USER user1;
用户即可拥有该角色权限。
用户切换角色
USE ROLE role_name;
切换后:
执行SQL全部按照当前角色权限执行。
修改用户
支持:
修改密码
SET PASSWORD;
修改默认角色
ALTER USER
DEFAULT_ROLE='role';
修改默认Warehouse
ALTER USER
DEFAULT_WAREHOUSE='wh1';
锁定用户
ALTER USER user1
ACCOUNT LOCK;
解锁:
ALTER USER user1
ACCOUNT UNLOCK;
删除用户
DROP USER user1;
六、Owner机制
GCDW引入Owner概念。
数据库对象:
- Database
- Table
- View
- Procedure
- Function
- Warehouse
均拥有Owner。
默认:
对象创建者当前角色即为Owner。
Owner拥有:
- 查询
- 修改
- 删除
- 转移Owner
等完整权限。
转移Owner
TRANSFORM OWNERSHIP
ON TABLE db.table
TO ROLE role_name;
例如:
TRANSFORM OWNERSHIP
ON TABLE test.t
TO ROLE analyst;
Owner即可变更。
若Owner角色删除,则Owner自动回退为AccountAdmin。
七、权限体系
GCDW支持四级权限控制:
- 全局权限
- 数据库权限
- 表权限
- 列权限
授权格式分别如下:
全局
GRANT ...
ON *.*.* to ROLE ...
数据库
GRANT ...
ON db.* to ROLE ...
表
GRANT ...
ON db.table to ROLE ...
列
GRANT ...(column)
ON db.table to ROLE ...
常见权限
包括但不限于:
| 权限 | 作用 |
|---|---|
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 修改数据 |
| DELETE | 删除数据 |
| CREATE | 创建数据库、表 |
| DROP | 删除数据库、表 |
| ALTER | 修改对象结构 |
| CREATE VIEW | 创建视图 |
| EXECUTE | 执行存储过程 |
| CREATE USER | 创建及管理用户 |
| SHOW DATABASES | 查看数据库 |
| PROCESS | 查看进程 |
| SUPER | 执行管理命令 |
| EVENT | 管理事件 |
| CREATE ROUTINE | 创建存储过程 |
| ALTER ROUTINE | 修改存储过程 |
| CREATE FILE FORMAT | 创建File Format |
| CREATE STAGE | 创建Stage |
| STAGE READ | 读取Stage |
| STAGE WRITE | 写入Stage |
| MODIFY_WAREHOUSE | 修改Warehouse |
| OPERATE_WAREHOUSE | 启停Warehouse并执行SQL |
| USAGE_WAREHOUSE | 使用Warehouse |
八、Warehouse权限
Warehouse属于全局资源。
支持:
GRANT USAGE_WAREHOUSE
ON *.*.*
TO ROLE role1;
也支持针对单个Warehouse授权:
GRANT USAGE_WAREHOUSE
ON WAREHOUSE wh1
TO ROLE role1;
Warehouse权限主要包括:
- USAGE_WAREHOUSE
- OPERATE_WAREHOUSE
- MODIFY_WAREHOUSE
分别用于:
- 使用Warehouse
- 启停Warehouse
- 修改Warehouse配置
九、密码安全策略
系统支持统一密码策略。
主要参数包括:
| 参数 | 说明 |
|---|---|
| password_min_length | 最小密码长度 |
| password_format_option | 密码复杂度要求 |
| password_life_time | 密码生命周期 |
| password_reuse_max | 历史密码重复限制 |
| password_reuse_time | 密码重复使用时间限制 |
密码复杂度支持:
- 数字
- 小写字母
- 大写字母
- 特殊字符
可组合配置满足企业安全要求。
十、最佳实践
为了保证权限体系清晰、易维护,建议遵循以下原则:
- 所有权限均通过角色进行管理,不直接面向用户授权。
- 所有角色统一纳入同一棵角色继承树,避免孤立角色和循环继承。
- 根据业务职责设计角色,遵循最小权限原则。
- 用户可拥有多个角色,但通过切换当前角色完成不同业务操作。
- 定期检查角色继承关系、权限分配和用户状态,及时清理无效角色和用户。
- 结合密码策略和账户锁定机制,加强账号安全管理。
- 对数据库对象合理规划Owner,避免因角色删除导致Owner异常回退。
评论
热门帖子
- 12025-12-01浏览数:183400
- 22023-05-09浏览数:26142
- 42023-09-25浏览数:19809
- 52020-05-11浏览数:18457