南大通用数仓-GCDW-学习-04-角色管理

发布于:2025-02-12 ⋅ 阅读:(99) ⋅ 点赞:(0)

目录

一、环境信息

二、概念

三、用户相关系统表

1、CLOUD.ROLE

(1)字段解释

(2)示例

四、实操

1、创建角色

(1)语法

(2)示例

2、重命名角色

(1)语法

(2)示例

3、授予角色给用户

(1)语法

(2)示例

4、授予角色给角色(角色继承)

(1)语法

(2)示例

5、从用户中撤销角色

(1)语法

(2)示例

6、从角色中撤销角色

(1)语法

(2)示例

7、OWNER 转移

(1)语法

(2)示例

8、查看当前用户拥有的所有角色名称

(1)语法

(2)示例

9、查看当前用户正在使用的角色名称

(1)语法

(2)示例

10、删除角色

(1)语法

(2)示例


一、环境信息

名称
CPU Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
操作系统 CentOS Linux release 7.9.2009 (Core)
内存 4G
逻辑核数 4
GCDW版本 9.8.0.6.17
集群节点1IP 192.168.142.10

二、概念

GCDW 的账户管理是基于角色的访问控制,对数据库操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。GCDW 的账户管理,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,并且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

GCDW系统内置了3个系统角色,分别是ACCOUNTADMIN、SYSTEMADMIN、PUBLICADMIN。这三个系统角色禁止修改和删除。

编号 描述
1 ACCOUNTADMIN为系统中的顶级角色,不允许将ACCOUNTADMIN角色授予其他角色(即ACCOUNTADMIN不允许作为任何角色的子角色)。ACCOUNTADMIN 角色具有最高级权限,可以操作账户中的所有对象。是SYSTEMADMIN和PUBLICADMIN的拥有者。
2 SYSTEMADMIN角色拥有账户中创建 warehouse 和数据库(以及其他对象,不包括 user 和 role)的权限。是PUBLICADMIN的拥有者。
3 PUBLICADMIN 角色是一个伪角色,它被自动授予账户中的每一个用户和角色。不允许将其他角色属于 PUBLICADMIN(即 PUBLICADMIN 不允许作为任何角色的父角色)。

三、用户相关系统表

1、CLOUD.ROLE

(1)字段解释

序号 列名 描述
1 rolename 角色的名字
2 grant_users 拥有该角色的用户列表
3 grant_roles 被赋予的角色列表
4 sons 子角色列表
5 SELECT_PRIV 角色是否具有 SELECT 权限
6 INSERT_PRIV 角色是否具有 INSERT 权限
7 UPDATE_PRIV 角色是否具有 UPDATE 权限
8 DELETE_PRIV 角色是否具有 DELETE 权限
9 CREATE_PRIV 角色是否具有 CREATE 权限
10 DROP_PRIV 角色是否具有 DROP 权限
11 RELOAD_PRIV 角色是否具有 RELOAD 权限
12 PROCESS_PRIV 角色是否具有 PROCESS 权限
13 GRANT_PRIV 角色是否具有 GRANT 权限
14 REFERENCES_PRIV 角色是否具有 REFERENCE 权限
15 INDEX_PRIV 角色是否具有 INDEX 权限
16 ALTER_PRIV 角色是否具有 ALTER 权限
17 SHOW DATABASES_PRIV 角色是否具有 SHOW DATABASES 权限
18 SUPER_PRIV 角色是否具有 SUPER 权限
19 CREATE TEMPORARY TABLES_PRIV 角色是否具有 CREATE 临时表权限
20 LOCK TABLES_PRIV 角色是否具有 LOCK 表权限
21 EXECUTE_PRIV 角色是否具有 EXECUTE 权限
22 UNMASK_PRIV 角色是否具有脱敏数据查看权限(当前版本无效)
23 CREATE VIEW_PRIV 角色是否具有 CREATE VIEW 权限
24 SHOW VIEW_PRIV 角色是否具有 SHOW VIEW 权限
25 CREATE ROUTINE_PRIV 角色是否具有 CREATE ROUTINE 权限
26 ALTER ROUTINE_PRIV 角色是否具有 ALTER ROUTINE 权限
27 CREATE USER_PRIV 角色是否具有 CREATE USER 权限
28 EVENT_PRIV 角色是否具有 EVENT 权限
29 TRIGGER_PRIV 角色是否具有 TRIGGER 权限
30 MODIFY_WAREHOUSE_PRIV 角色是否具有 MODIFY WAREHOUSE 权限
31 OPERATE_WAREHOUSE_PRIV 角色是否具有 OPERATE WAREHOUSE 权限
32 CREATE_FILE_FORMAT_PRIV 角色是否具有 CREATE FILE FORMAT 权限
33 CREATE_STAGE_PRIV 角色是否具有 CREATE STAGE 权限
34 STAGE_READ_PRIV 角色是否具有 STAGE READ 权限
35 STAGE_WRITE_PRIV 角色是否具有 STAGE WRITE 权限
36 FILE_FORMAT_USAGE_PRIV 角色是否具有 FILE FORMAT USAGE 权限
37 TABLESPACE_PRIV 角色是否具有表空间相关权限
38 UDF_PRIV 角色是否具有C或python自定义函数相关权限
39 create_time 角色的创建时间
40 owner 角色的拥有者
41 comment 角色的注释信息

(2)示例

gbase> SELECT * FROM CLOUD.ROLE WHERE ROLENAME = 'ACCOUNTADMIN'\G;
*************************** 1. row ***************************
                    rolename: accountadmin
                 grant_users: 
                 grant_roles: systemadmin
                        sons: systemadmin,publicadmin
                 SELECT_PRIV: Y
                 INSERT_PRIV: Y
                 UPDATE_PRIV: Y
                 DELETE_PRIV: Y
                 CREATE_PRIV: Y
                   DROP_PRIV: Y
                 RELOAD_PRIV: Y
                PROCESS_PRIV: Y
                  GRANT_PRIV: Y
             REFERENCES_PRIV: Y
                  INDEX_PRIV: Y
                  ALTER_PRIV: Y
         SHOW DATABASES_PRIV: Y
                  SUPER_PRIV: Y
CREATE TEMPORARY TABLES_PRIV: Y
            LOCK TABLES_PRIV: Y
                EXECUTE_PRIV: Y
                 UNMASK_PRIV: Y
            CREATE VIEW_PRIV: Y
              SHOW VIEW_PRIV: Y
         CREATE ROUTINE_PRIV: Y
          ALTER ROUTINE_PRIV: Y
            CREATE USER_PRIV: Y
                  EVENT_PRIV: Y
                TRIGGER_PRIV: Y
       MODIFY_WAREHOUSE_PRIV: Y
      OPERATE_WAREHOUSE_PRIV: Y
     CREATE_FILE_FORMAT_PRIV: Y
           CREATE_STAGE_PRIV: Y
             STAGE_READ_PRIV: Y
            STAGE_WRITE_PRIV: Y
      FILE_FORMAT_USAGE_PRIV: Y
             TABLESPACE_PRIV: Y
                    UDF_PRIV: Y
                 create_time: NULL
                       owner: 
                     comment: 
1 row in set (Elapsed: 00:00:00.03)

四、实操

1、创建角色

(1)语法

CREATE ROLE rolename [COMMENT=’’];

(2)示例

gbase> CREATE ROLE ROLE_CZG COMMENT = 'Sun';
Query OK, 0 rows affected (Elapsed: 00:00:00.10)

2、重命名角色

(1)语法

RENAME ROLE <old_name> TO <new_name>;

(2)示例

gbase> RENAME ROLE ROLE_CZG TO ROLE_LZL;
Query OK, 0 rows affected (Elapsed: 00:00:00.05)

3、授予角色给用户

将角色 rolename 授予用户 username。当 username 使用该角色创建会话,会话中 username 将拥有该角色的权限。

(1)语法

GRANT ROLE rolename TO USER username;

(2)示例

gbase> GRANT ROLE ROLE_LZL TO USER CZG;
Query OK, 0 rows affected (Elapsed: 00:00:00.13)

4、授予角色给角色(角色继承)

授予角色给角色即设置角色的父角色,当前角色的权限也会传递给父角色。这是构造 GCDW 角色继承树的唯一语法.

使用建议:

1、 角色继承建议所有角色均在继承体系中,避免出现孤立的角色。

2、 尽量保证 systemadmin 角色可以找到一条继承线路到达每一个自建角色。

3、 继承树中,尽量将管理员自建角色挂载到 systemadmin 角色之下,publicadmin 角色之上。保证 accountadmin 角色为继承树中最高级角色,publicadmin 角色 为继承树中最低级角色。禁止形成环路。

4、 禁止将 accountadmin 角色授予给自建角色,禁止将自建角色授予给 publicadmin。即 accountadmin 不允许有父角色存在,publicadmin 不允许有子 角色存在。

(1)语法

GRANT ROLE rolename TO ROLE parent_rolename;

(2)示例

gbase> GRANT ROLE ROLE_LZL TO ROLE systemadmin;               
Query OK, 0 rows affected (Elapsed: 00:00:00.04)

5、从用户中撤销角色

(1)语法

REVOKE ROLE rolename FROM USER username;

(2)示例

gbase> REVOKE ROLE ROLE_LZL FROM USER CZG;
Query OK, 0 rows affected (Elapsed: 00:00:00.05)

6、从角色中撤销角色

(1)语法

REVOKE ROLE rolename1 FROM ROLE rolename2;

(2)示例

gbase> REVOKE ROLE ROLE_LZL FROM ROLE systemadmin;
Query OK, 0 rows affected (Elapsed: 00:00:00.04)

7、OWNER 转移

GCDW 中数据库对象(库、表、存储过程、函数、EVENT、Warehouse 等)的 OWNER 默认为该对象创建者的角色。OWNER 对其拥有的对象具有完整的操作权限,包 括创建、删除、数据增删改查、以及将 OWNER 转移给其他角色等权限。同时 OWNER 又具有一定的隔离特性,OWNER 只能看到和操作自己在拥有的对象上 创建的内容,无法看到其他角色在其拥有的对象上创建的内容。

例如:A 库的 OWNER 为角色 r1,则 r1 在 A 库上有完整的操作权限,但是 r1 只 能看到和操作自己在 A 库上创建的对象。

OWNER 转移与权限无关,只与继承树有关。

(1)语法

TRANSFORM OWNERSHIP ON TYPE_OPTION name TO ROLE rolename;

(2)示例

gbase> SELECT * FROM CLOUD.ROLE WHERE ROLENAME = 'ROLE_LZL'\G;   
*************************** 1. row ***************************
                    rolename: ROLE_LZL
                 grant_users: CZG
                 grant_roles: 
                        sons: publicadmin
                 SELECT_PRIV: N
                 INSERT_PRIV: N
                 UPDATE_PRIV: N
                 DELETE_PRIV: N
                 CREATE_PRIV: N
                   DROP_PRIV: N
                 RELOAD_PRIV: N
                PROCESS_PRIV: N
                  GRANT_PRIV: N
             REFERENCES_PRIV: N
                  INDEX_PRIV: N
                  ALTER_PRIV: N
         SHOW DATABASES_PRIV: N
                  SUPER_PRIV: N
CREATE TEMPORARY TABLES_PRIV: N
            LOCK TABLES_PRIV: N
                EXECUTE_PRIV: N
                 UNMASK_PRIV: N
            CREATE VIEW_PRIV: N
              SHOW VIEW_PRIV: N
         CREATE ROUTINE_PRIV: N
          ALTER ROUTINE_PRIV: N
            CREATE USER_PRIV: N
                  EVENT_PRIV: N
                TRIGGER_PRIV: N
       MODIFY_WAREHOUSE_PRIV: N
      OPERATE_WAREHOUSE_PRIV: N
     CREATE_FILE_FORMAT_PRIV: N
           CREATE_STAGE_PRIV: N
             STAGE_READ_PRIV: N
            STAGE_WRITE_PRIV: N
      FILE_FORMAT_USAGE_PRIV: N
             TABLESPACE_PRIV: N
                    UDF_PRIV: N
                 create_time: 2024-07-16 09:58:46
                       owner: accountadmin
                     comment: Sun
1 row in set (Elapsed: 00:00:00.03)

ERROR: 
No query specified

gbase> TRANSFORM OWNERSHIP ON ROLE ROLE_LZL TO ROLE systemadmin; 
ERROR 1758 (HY000): gcluster dal error: 192.168.142.10:can't transform owner ROLE role_lzl to role systemadmin. 

gbase> TRANSFORM OWNERSHIP ON DATABASE CZG TO ROLE ROLE_LZL;    
Query OK, 0 rows affected (Elapsed: 00:00:00.05)

角色转移给角色失败了,后续我也再摸索一下,和我的原OWNER是最高角色有关吗?

8、查看当前用户拥有的所有角色名称

(1)语法

SHOW ROLES;

(2)示例

gbase> SHOW ROLES;
+--------------+
| Role         |
+--------------+
| accountadmin |
| systemadmin  |
| publicadmin  |
| ADMIN_ROLE   |
| ROLE_LZL     |
+--------------+
5 rows in set (Elapsed: 00:00:00.03)

9、查看当前用户正在使用的角色名称

(1)语法

SELECT ROLE();

(2)示例

gbase> SELECT ROLE();
+--------------+
| ROLE()       |
+--------------+
| accountadmin |
+--------------+
1 row in set (Elapsed: 00:00:00.00)

10、删除角色

角色删除后,被删除角色的权限也同时被回收,继承树上父角色拥有的被删除子 角色的权限也将被回收,父角色自身的权限不受影响。

删除角色会使继承体系出现断层,需要及时将删除角色的原子角色及时 grant 给 新的角色。

指定角色被删除后,OWNER 为该角色的对象会转移 OWNER 为当前登录角色。

如果存在 default_role 为删除角色的用户,用户的 default_role 将改为 publicadmin, 需要及时将该用户的 default_role 更改为适当的角色。

(1)语法

DROP ROLE rolename;

(2)示例

gbase> DROP ROLE ROLE_LZL;
Query OK, 0 rows affected (Elapsed: 00:00:00.07)


网站公告

今日签到

点亮在社区的每一天
去签到