基于角色的權限管理(RBAC)
更新時間 2023-11-23 18:24:58
最近更新時間: 2023-11-23 18:24:58
分享文章
本章節主要介紹最佳實踐中基于角色的權限管理(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;

