数据仓库-基于角色的权限管理(RBAC)

什么是基于角色的用户管理?

  • 基于角色的用户管理(Role-Based Access Control,简称RBAC)是通过为角色赋予权限,用户通过成为适当的角色而得到这些角色的权限。

  • 角色是一组权限的抽象。

  • 使用RBAC可以极大简化对权限的管理。

什么是RBAC模型?

为角色赋予适当的权限。

指定用户为相应的角色。

场景介绍

假设有两个SCHEMA:s1, s2。

有两组用户:

  • 一组用户包括u1, u2,可以在s1中查询所有表,在s2中更新所有表。
  • 另一组用户包括u3, u4,可以在s2中查询所有表,在s1中更新所有表。

1.使用系统管理员dbadmin连接DWS数据库。

2.复制以下语句在窗口1中执行,创建本用例的SCHEMA s1和s2,用户u1~u4。

说明

示例中'{password}'请替换成实际密码。

复制代码
CREATE SCHEMA s1; 
CREATE SCHEMA s2; 
CREATE USER u1 PASSWORD '{password}'; 
CREATE USER u2 PASSWORD '{password}'; 
CREATE USER u3 PASSWORD '{password}'; 
CREATE USER u4 PASSWORD '{password}';

3.复制以下语句在窗口1中执行,创建对应的s1.t1,s2.t1表。

复制代码
CREATE TABLE s1.t1 (c1 int, c2 int); 
CREATE TABLE s2.t1 (c1 int, c2 int);

4.复制以下语句在窗口1中执行,为表插入数据。

复制代码
INSERT INTO s1.t1 VALUES (1,2); 
INSERT INTO s2.t1 VALUES (1,2);

5.复制以下语句在窗口1中执行,创建4个角色。分别对应s1的查询权限、s1的更新权限、s2的查询权限、s2的更新权限。

复制代码
CREATE ROLE rs1_select PASSWORD disable;  --s1的查询权限 
CREATE ROLE rs1_update PASSWORD disable;  --s1的更新权限 
CREATE ROLE rs2_select PASSWORD disable;  --s2的查询权限 
CREATE ROLE rs2_update PASSWORD disable;  --s2的更新权限

6.复制以下语句在窗口1中执行,将SCHEMA s1和s2的访问权限先授予这些角色。

复制代码
GRANT USAGE ON SCHEMA s1, s2 TO rs1_select, rs1_update,rs2_select, rs2_update;

7.复制以下语句在窗口1中执行,将具体的权限授予这些角色。

复制代码
GRANT SELECT ON ALL TABLES IN SCHEMA s1 TO rs1_select; --将s1下的所有表的查询权限授予角色rs1_select 
GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s1 TO rs1_update;  --将s1下的所有表的查询、更新权限授予角色rs1_update 
GRANT SELECT ON ALL TABLES IN SCHEMA s2 TO rs2_select;  --将s2下的所有表的查询权限授予角色rs2_select 
GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s2 TO rs2_update;  --将s2下的所有表的查询、更新权限授予角色rs2_update

8.复制以下语句在窗口1中执行,将对应的角色授予对应的用户,实现将一组权限授予用户。

复制代码
GRANT rs1_select, rs2_update TO u1, u2;  --u1,u2可以对s1的查询权限、对s2的更新权限。 
GRANT rs2_select, rs1_update TO u3, u4;  --u3,u4可以对s2的查询权限、对s1的更新权限。

9.复制以下语句在窗口1中执行,可以查看指定用户绑定的角色。

复制代码
\du u1;

10.重新打开一个会话窗口2,以用户u1连接DWS数据库。

复制代码
gsql -d gaussdb -h <DWS的公网IP> -U u1 -p 8000 -r -W {password};

11.复制以下语句在窗口2中执行,验证用户u1对s1.t1有查询权限而没有更新权限。

复制代码
SELECT * FROM s1.t1; 
UPDATE s1.t1 SET c2 = 3 WHERE c1 = 1;

12.复制以下语句在窗口2中执行,验证用户u1对s2.t1有更新权限。

复制代码
SELECT * FROM s2.t1; 
UPDATE s2.t1 SET c2 = 3 WHERE c1 = 1;
相关推荐
倔强的石头_10 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql