REVOKE
功能描述
REVOKE用于撤销一个或多个角色的权限。
注意事项
非对象所有者试图在对象上REVOKE权限,命令按照以下规则执行:
- 如果授权用户没有该对象上的权限,则命令立即失败。
- 如果授权用户有部分权限,则只撤销那些有授权选项的权限。
- 如果授权用户没有授权选项,REVOKE ALL PRIVILEGES形式将发出一个错误信息,而对于其他形式的命令而言,如果是命令中指定名字的权限没有相应的授权选项,该命令将发出一个警告。
- 不允许对表分区进行REVOKE操作,对分区表进行REVOKE操作会引起告警。
语法格式
- 撤销指定表和视图上权限。
1 2 3 4 5 6 7
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销表上指定字段权限。
1 2 3 4 5 6
REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定数据库上权限。
1 2 3 4 5 6
REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定函数上权限。
1 2 3 4 5 6
REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定大对象上权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定序列上权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequence_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定模式上权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 撤销指定子集群上权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { CREATE | USAGE | COMPUTE | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
- 按角色撤销角色上的权限。
1 2 3
REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ];
- 撤销角色上的sysadmin权限。
1
REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name;
参数说明
关键字PUBLIC表示一个隐式定义的拥有所有角色的组。
权限类别和参数说明,请参见GRANT的参数说明。
任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。
指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。
如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,依赖性权限仍然存在,但如果声明了CASCADE,则所有依赖性权限都被撤销。
一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITH ADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。
如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪个包含的角色执行的该命令是不确定的。在这种场合下,最好的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。
示例
创建用户jim:
1
|
CREATE USER jim PASSWORD '{Password}'; |
创建模式:
CREATE SCHEMA tpcds;
创建数据库:
CREATE DATABASE mydatabase OWNER jim;
创建表:
1
|
CREATE TABLE IF NOT EXISTS tpcds.reason(r_reason_sk int,r_reason_id int,r_reason_desc int); |
创建视图:
1
|
CREATE VIEW myview AS select * from tpcds.reason; |
1
|
REVOKE ALL PRIVILEGES FROM jim; |
1
|
REVOKE USAGE,CREATE ON SCHEMA tpcds FROM jim; |
撤销jim用户的CONNECT特权:
1
|
REVOKE CONNECT ON DATABASE mydatabase FROM jim; |
从用户jim撤销角色dbadmin中的成员资格:
1
|
REVOKE dbadmin FROM jim; |
撤销用户jim对视图myView具有的所有特权:
1
|
REVOKE ALL PRIVILEGES ON myView FROM jim; |
撤销针对表customer_t1的公共插入特权:
1
|
REVOKE INSERT ON tpcds.reason FROM PUBLIC; |
撤销用户jim对tpcds.reason表中r_reason_sk,r_reason_id的查询权限:
1
|
REVOKE select (r_reason_sk, r_reason_id) ON tpcds.reason FROM jim; |
撤销用户jim的函数权限:
1 2 3 4 5 6 |
CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; REVOKE execute ON FUNCTION func_add_sql(integer, integer) FROM jim CASCADE; |