
# DWS数据库权限管理
#### 权限概述
**权限**表示用户访问某个数据库对象（包括模式、表、函数、序列等）的操作（包括增、删、改、查、创建等）是否被允许。
DWS中的权限管理分为三种场景：
- 系统权限 系统权限又称为用户属性，包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。
  系统权限一般通过CREATE/ALTER ROLE语法来指定。其中，SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承，也无法授予PUBLIC。
  

- 数据对象权限 将数据库对象（表和视图、指定字段、数据库、函数、模式等）的相关权限授予特定角色或用户。GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。
  
- 用户权限 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下，每个角色或用户都可视为拥有一个或多个数据库权限的集合。
  当声明了WITH ADMIN OPTION，被授权的用户可以将该权限再次授予其他角色或用户，以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时，所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。
  数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。
  
 
#### 层级权限管理
DWS通过Database、Schema和数据对象权限实现层级权限管理。
- Database之间无法直接互访，通过连接隔离实现彻底的权限隔离。各个Database之间共享资源极少，可实现连接隔离、权限隔离等。数据库集群包含一个或多个已命名数据库。用户和角色在整个集群范围内是共享的，但是其数据并不共享。即用户可以连接任何数据库，但当连接成功后，任何用户都只能访问连接请求里所声明的数据库。
- Schema隔离的方式共用资源较多，可以通过GRANT与REVOKE语法便捷地控制不同用户对各Schema及其下属对象的权限，从而赋予业务更多的灵活性。每个数据库包括一个或多个Schema。每个Schema包含表、函数等其他类型的对象。用户要访问包含在指定Schema中的对象，需要被授予Schema的USAGE权限。
- 对象创建后，默认只有对象所有者或者系统管理员可以查询、修改和删除对象。其他用户要访问包含具体的数据库对象，例如table1，需要首先被授予database的CONNECT权限，再被授予Schema的USAGE权限，最后授予table1的SELECT权限。用户要访问底层的对象，必须先赋予上层对象的权限。比如用户要创建或者删除Schema，需要首先被授予database的CREATE权限；
图1层级权限管理   
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001865354729.png "点击放大")
#### 角色
DWS的权限管理模型，是一种典型的RBAC（基于角色的权限控制）的实现。其将用户、角色、权限通过此模型管理起来。
角色是一组权限的集合。
- "用户"概念和"角色"概念实际是等同的，唯一的区别在于"用户"拥有login权限，而"角色"拥有nologin权限。
- 按照数据库系统中承担的责任划分具有不同权限的角色。角色是数据库权限的集合，代表了一个数据库用户或一组数据库用户的行为约束。
- 角色和用户可以转换，通过ALTER语句使角色拥有登录权限。
- 通过GRANT语句把角色授予用户后，用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。例如，可以为设计、开发和维护人员创建不同的角色，将角色GRANT给用户后，再向每个角色中的用户授予其所需数据的差异权限。在角色级别授予或撤销权限时，这些权限更改会对角色下的所有成员生效。
- 非三权分立时，只有系统管理员和具有CREATEROLE属性的用户才能创建、修改或删除角色。三权分立下，只有具有CREATEROLE属性的用户才能创建、修改或删除角色。
要查看所有角色，请查询系统表PG_ROLES：
```
SELECT * FROM PG_ROLES;
```
具体的创建，修改和删除角色操作，可参考《数据仓库服务SQL语法参考》中"CREATE ROLE/ALTER ROLE/DROP ROLE"章节。
#### 预置角色
DWS提供了一组预置角色，以"gs_role_"开头命名，提供对特定的、通常需要高权限的操作的访问，可以将这些角色授权予数据库中的其他用户或角色，使这些用户能够访问或使用特定的信息和功能。请谨慎使用预置角色，以确保预置角色权限的安全使用。
预置角色允许的权限范围可参考下表：
表1预置角色允许的权限范围 
| 角色                     | 权限描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|
| gs_role_signal_backend | 具有调用函数pg_cancel_backend()、pg_terminate_backend()、pg_terminate_query()、pg_cancel_query()、pgxc_terminate_query()、pgxc_cancel_query()来取消或终止其他会话的权限，但不能操作属于初始用户的会话。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| gs_role_read_all_stats | 读取系统状态视图或函数并且使用与扩展相关的各种统计信息，包括有些通常只对系统管理员可见的信息。包括： 资源管理类： - pgxc_wlm_operator_history  - pgxc_wlm_operator_info  - pgxc_wlm_operator_statistics  - pgxc_wlm_session_info  - pgxc_wlm_session_statistics  - pgxc_wlm_workload_records  - pgxc_workload_sql_count  - pgxc_workload_sql_elapse_time  - pgxc_workload_transaction   状态信息类： - pgxc_stat_activity  - pgxc_get_table_skewness  - table_distribution  - pgxc_total_memory_detail  - pgxc_os_run_info  - pg_nodes_memory  - pgxc_instance_time  - pgxc_redo_stat   表存储分布信息函数： - table_distribution()  - table_distribution(regclass)  - table_distribution(schemaname text, tablename text)  - gs_table_distribution()  - gs_table_distribution(schemaname text, tablename text)   |
| gs_role_analyze_any    | 具有系统级ANALYZE权限类似系统管理员用户，跳过schema权限检查，对所有的表可以执行ANALYZE。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| gs_role_vacuum_any     | 具有系统级VACUUM权限类似系统管理员用户，跳过schema权限检查，对所有的表可以执行VACUUM。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| gs_role_redaction      | 具有创建、修改、删除脱敏策略的权限，对所有的表都可以执行CREATE/ALTER/DROP REDACTION POLICY。9.1.0.100及以上集群版本支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| gs_role_block          | 具有执行CREATE/ALTER/DROP BLOCK RULE的权限。9.1.0.100及以上集群版本支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
**预置角色的使用约束**：
- 以gs_role_开头的角色名作为数据库的预置角色保留字，禁止新建以"gs_role_"开头的用户/角色，也禁止将已有的用户/角色重命名为以"gs_role_"开头。
- 禁止对预置角色执行ALTER和DROP操作。
- 预置角色默认没有LOGIN权限，不设置预置登录密码。
- gsql元命令\\du和\\dg不显示预置角色的相关信息，但若指定了PATTERN（用来指定要被显示的对象名称）则预置角色信息会显示。
- 三权分立关闭时，系统管理员和具有预置角色ADMIN OPTION权限的用户有权对预置角色执行GRANT/REVOKE管理；三权分立打开时，安全管理员（具有CREATEROLE属性）和具有预置角色ADMIN OPTION权限的用户有权对预置角色执行GRANT/REVOKE管理。例如：
  ```
  GRANT gs_role_signal_backend TO user1; 
  REVOKE gs_role_signal_backend FROM user1;
  ```
  
 
#### 权限授予或撤销
数据库对象创建后，进行对象创建的用户就是该对象的所有者。集群安装后的默认情况下，未开启[三权分立](https://support.huaweicloud.com/devg-dws/dws_04_0056.html)，数据库系统管理员具有与对象所有者相同的权限。
也就是说对象创建后，默认只有对象所有者或者系统管理员可以查询、修改和删除对象，以及通过GRANT将对象的权限授予其他用户。为使其他用户能够使用对象，可以由对象所有者或管理员通过GRANT/REVOKE对其他用户或角色授予与撤销。
- 使用GRANT语句授予权限。
  例如，将模式myschema的权限赋予角色u1后，将表myschema.t1的SELECT权限授予角色u1。
  ```
  GRANT USAGE ON SCHEMA myschema TO u1;
  GRANT SELECT ON TABLE myschema.t1 to u1;
  ```
  

- 使用REVOKE撤销已经授予的权限。
  例如：撤销用户u1在指定表myschema.t1上的所有权限。
  ```
  REVOKE ALL PRIVILEGES ON myschema.t1 FROM u1;
  ```
  
 
