GaussDB-REVOKE

26 阅读6分钟

GaussDB-REVOKE

功能描述

REVOKE用于撤销一个或多个角色的权限。

注意事项

非对象所有者试图在对象上REVOKE权限,命令按照以下规则执行:

  • 如果授权用户没有该对象上的权限,则命令立即失败。
  • 如果授权用户有部分权限,则只撤销那些有授权选项的权限。
  • 如果授权用户没有授权选项,REVOKE ALL PRIVILEGES形式将发出一个错误信息,而对于其他形式的命令而言,如果是命令中指定名称的权限没有相应的授权选项,该命令将发出一个警告。
语法格式
  • 回收指定表或视图上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收表上指定字段权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定序列上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE | ALTER | DROP | COMMENT }[, ...] | ALL [ PRIVILEGES ] } ON { [ SEQUENCE ] sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定数据库上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定域上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定客户端加密主密钥上的权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES] } ON CLIENT_MASTER_KEYS client_master_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定列加密密钥上的权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES]} ON COLUMN_ENCRYPTION_KEYS column_encryption_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定目录上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { READ | WRITE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON DIRECTORY directory_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定外部数据源上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定外部服务器上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • 回收指定函数上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定存储过程上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL PROCEDURE IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定过程语言上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定大对象上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • 回收指定模式上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定表空间上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定类型上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收指定子集群上权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | COMPUTE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/cd6a60d20dff4bf8bba5a500fb9cb80b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771810778&x-signature=x1%2B%2FQbFLFSWd8KzNAuGP5XBeGxc%3D)
    
    回收子集群的create权限时,会默认回收usage和compute权限。
    
    
  • 回收directory对象的权限。

    | ``` REVOKE [ GRANT OPTION FOR ] { { READ | WRITE } [, ...] | ALL [PRIVILEGES] } ON DIRECTORY directory_name [, ...] FROM {[GROUP] role_name | PUBLIC} [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • 按角色回收角色上的权限。

    | ``` REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ];

    | ------------------------------------------------------------------------------------------------------------- |
    
    
  • 回收角色上的sysadmin权限。

    | ``` REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name;

    | -------------------------------------------------------------- |
    
    
  • 回收ANY权限。

    | ``` REVOKE [ ADMIN OPTION FOR ] { CREATE ANY TABLE | ALTER ANY TABLE | DROP ANY TABLE | SELECT ANY TABLE | INSERT ANY TABLE | UPDATE ANY TABLE | DELETE ANY TABLE | CREATE ANY SEQUENCE | CREATE ANY INDEX | CREATE ANY FUNCTION | EXECUTE ANY FUNCTION | CREATE ANY TYPE | ALTER ANY TYPE | DROP ANY TYPE | ALTER ANY SEQUENCE | DROP ANY SEQUENCE | SELECT ANY SEQUENCE | ALTER ANY INDEX | DROP ANY INDEX | CREATE ANY SYNONYM | DROP ANY SYNONYM | CREATE ANY TRIGGER | ALTER ANY TRIGGER | DROP ANY TRIGGER } [, ...] FROM [ GROUP ] role_name [, ...];

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
  • 回收DATABASE LINK对象权限。

    REVOKE { CREATE | ALTER | DROP } [PUBLIC] DATABASE LINK FROM role_name; 
    

    DATABASE LINK详细说明请参见DATABASE LINK

  • 回收PUBLIC同义词的权限。

    REVOKE { CREATE | DROP } PUBLIC SYNONYM FROM role_name; 
    

    通过内置角色(gs_role_public_synonym_create、gs_role_public_synonym_drop)的方式也可以实现回收PUBLIC同义词的权限。

    • 回收创建PUBLIC同义词权限:

      REVOKE gs_role_public_synonym_create FROM role_name;
      
    • 回收删除PUBLIC同义词权限:

      REVOKE gs_role_public_synonym_drop 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,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。

示例
  • 从用户tom收回角色jerry的权限:

    | ``` gaussdb=# REVOKE jerry FROM tom; REVOKE ROLE

    | ----------------------------------------------------- |
    
  • 从用户tom收回对模式jerry下表t1的SELECT权限:

    | ``` gaussdb=# REVOKE SELECT ON TABLE jerry.t1 FROM tom; REVOKE

    | ------------------------------------------------------------------- |
    
  • 从用户tom收回对模式jerry下函数fun1的EXECUTE权限:

    | ``` gaussdb=# REVOKE EXECUTE ON FUNCTION jerry.fun1() FROM tom; REVOKE

    | --------------------------------------------------------------------------- |
    
  • 从用户tom收回对数据库DB1的CONNECT权限:

    | ``` gaussdb=# REVOKE CONNECT ON database DB1 FROM tom; REVOKE

    | ------------------------------------------------------------------ |
    

更多示例请参见GRANT的示例

相关链接

GRANT

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…