基于角色的权限管理(RBAC) 本章节主要介绍最佳实践中基于角色的权限管理(RBAC)。 什么是基于角色的用户管理? 基于角色的用户管理(RoleBased 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 rs1select PASSWORD disable; s1的查询权限 CREATE ROLE rs1update PASSWORD disable; s1的更新权限 CREATE ROLE rs2select PASSWORD disable; s2的查询权限 CREATE ROLE rs2update PASSWORD disable; s2的更新权限 6.复制以下语句在窗口1中执行,将SCHEMA s1和s2的访问权限先授予这些角色。 GRANT USAGE ON SCHEMA s1, s2 TO rs1select, rs1update,rs2select, rs2update; 7.复制以下语句在窗口1中执行,将具体的权限授予这些角色。 GRANT SELECT ON ALL TABLES IN SCHEMA s1 TO rs1select; 将s1下的所有表的查询权限授予角色rs1select GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s1 TO rs1update; 将s1下的所有表的查询、更新权限授予角色rs1update GRANT SELECT ON ALL TABLES IN SCHEMA s2 TO rs2select; 将s2下的所有表的查询权限授予角色rs2select GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s2 TO rs2update; 将s2下的所有表的查询、更新权限授予角色rs2update 8.复制以下语句在窗口1中执行,将对应的角色授予对应的用户,实现将一组权限授予用户。 GRANT rs1select, rs2update TO u1, u2; u1,u2可以对s1的查询权限、对s2的更新权限。 GRANT rs2select, rs1update TO u3, u4; u3,u4可以对s2的查询权限、对s1的更新权限。 9.复制以下语句在窗口1中执行,可以查看指定用户绑定的角色。 du u1; 10.重新打开一个会话窗口2,以用户u1连接DWS数据库。 gsql d gaussdb h 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;