要撤消已经授予的权限,可以使用REVOKE。对象所有者的权限(例如ALTER、 DROP、GRANT和REVOKE)是隐式的,无法授予或撤消。即只要拥有对象就可以执行对象所有者的这些隐式权限。对象所有者可以撤消自己的普通权限,例如,使表对自己以及其他人只读。
系统表和系统视图要么只对系统管理员可见,要么对所有用户可见。标识了需要系统管理员权限的系统表和视图只有系统管理员可以查询。
5.2 系统管理员系统管理员是指具有SYSADMIN属性的帐户。集群安装后,默认情况下系统管理员具有与对象所有者相同的权限。
集群安装过程中自动生成的帐户称为初始用户。初始用户也是系统管理员,其拥有系统的最高权限,能够执行所有的操作。该帐户与进行集群安装的操作系统用户omm同名。
初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务应用。
5.3 系统权限与对象权限权限表示用户访问某个数据库对象的操作是否被允许,数据库对象包括表、函数、模式、序列等等,操作包括:创建、增、删、改、查等等。权限是用户对一项功能的执行权利,在DWS中,根据系统管理方式的不同,可将权限分为系统权限与对象权限两类。
5.3.1 系统权限数据库系统特定操作的能力,系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。
系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。
5.3.2 对象权限数据库对象操作的能力,如SELECT、INSERT、UPDATE、DELETE等。
对象权限可以有对象所有者或者管理员通过GRANT/REVOKE对其他角色分配或撤销。
5.4 授权操作对象权限管理主要通过GRANT/REVOKE赋予或收回用户/角色在某个对象上的权限,PUBLIC特质为所有角色赋权
权限操作示例:
示例1:将系统权限授权给用户或者角色。
创建名为joe的用户,并将sysadmin权限授权给他。
CREATE USER joe PASSWORD 'Bigdata123@';
GRANT ALL PRIVILEGES TO joe;
授权成功后,用户joe会拥有sysadmin的所有权限。
示例2:将对象权限授权给用户或者角色。
1、 撤销joe用户的sysadmin权限,然后将模式tpcds的使用权限和表tpcds.reason的所有权限授权给用户joe。
注:将Schema中的表或者视图对象授权给其他用户或角色时,需要将表或视图所属Schema的USAGE权限同时授予该用户或角色。否则用户或角色将只能看到这些对象的名字,并不能实际进行对象访问。
REVOKE ALL PRIVILEGES FROM joe;
GRANT USAGE ON SCHEMA tpcds TO joe;
GRANT ALL PRIVILEGES ON tpcds.reason TO joe;
授权成功后,joe用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。
2、将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe。
GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe;
授权成功后,用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限会立即生效。如果joe用户需要拥有将这些权限授权给3、其他用户的权限,可以通过以下语法对joe用户进行授权。
GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe WITH GRANT OPTION;
4、将数据库postgres的连接权限授权给用户joe,并给予其在postgres中创建schema的权限,而且允许joe将此权限授权给其他用户。
GRANT create,connect on database postgres TO joe WITH GRANT OPTION;
5、创建角色tpcds_manager,将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人。
CREATE ROLE tpcds_manager PASSWORD 'Bigdata123@';
GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager;
6、将表空间tpcds_tbspc的所有权限授权给用户joe,但用户joe无法将权限继续授予其他用户。
CREATE TABLESPACE tpcds_tbspc RELATIVE LOCATION 'tablespace/tablespace_1';
GRANT ALL ON TABLESPACE tpcds_tbspc TO joe;
示例3:将用户或者角色的权限授权给其他用户或角色。
1、创建角色manager,将joe的权限授权给manager,并允许该角色将权限授权给其他人。
CREATE ROLE manager PASSWORD 'Bigdata123@';
GRANT joe TO manager WITH ADMIN OPTION;
2、创建用户senior_manager,将用户manager的权限授权给该用户。
CREATE ROLE senior_manager PASSWORD 'Bigdata123@';
GRANT manager TO senior_manager;
3、撤销权限,并清理用户。
REVOKE manager FROM joe;
REVOKE senior_manager FROM manager;
DROP USER manager;
5.5 权限规划 5.5.1 系统最小授权规划原则