REVOKE

说明

收回已经授予的权限,即撤销授权。

语法

revoke ::=

revoke_system_privileges ::=

revoke_role_privileges ::=

revoke_object_privileges ::=

revokee_clause ::=

参数

system_privileges

系统权限。详见 GRANT 关于参数 system_privileges 的描述信息。

object_privilege

对象权限类型。详见 GRANT 关于参数 object_privilege 的描述信息。

object_type

对象类型。详见 GRANT 关于参数 object_type 的描述信息。

role

角色名。

user

用户名。

PUBLIC

PUBLIC 是一个数据库中的特殊“角色”,所有数据库用户都属于这个角色。授权给 PUBLIC 相当于授权给数据库的所有用户。

object

对象名。

ALL [PRIVILEGES]

对象上的所有权限。

GRANT OPTION FOR

若指定该选项,则只撤销用户的授权权限,不收回用户在对象上获得的权限;若不指定该选项,则撤销授予用户的指定权限,同时也撤销用户的授权权限。

CASCADE|RESTRICT

  • 若使用关键字CASCADE则表示级联收回所有用户直接或者级联获得的权限。
  • RESTRICT若用户已经授予其他用户权限,则不能收回这用户的权限,语句失败。需要用CASCADE收回所有级联用户权限。

如果不指定CASCADE或者RESTRICT,则默认为CASCADE。

注解

本语句用于回收GRANT语句授出的权限。执行REVOKE语句的用户必须是被REVOKE用户的授权者,超级用户,或者数据库对象的所有者。

示例

示例1: 回收用户权限

--  清理环境
DROP USER user1 CASCADE;
DROP TABLE tab1 CASCADE;

--  创建表
CREATE TABLE tab1(a INT);

--  创建用户
CREATE USER user1;

--  授权
GRANT SELECT, UPDATE ON tab1 TO user1;

--  回收用户权限
REVOKE SELECT, UPDATE ON tab1 FROM user1;


--  删除表和用户
DROP TABLE tab1;
DROP USER user1;

示例2: 回收多个用户的多个权限

--  清理环境
DROP USER user3 CASCADE;
DROP USER user2 CASCADE;
DROP TABLE tab2 CASCADE;

--  创建表
CREATE TABLE tab2(a INT);

--  创建用户
CREATE USER user2;
CREATE USER user3;

--  授权
GRANT SELECT, UPDATE ON tab2 TO user2;
GRANT SELECT, UPDATE, INSERT ON tab2 TO user3;

--  回收多个用户的多个权限
REVOKE SELECT, UPDATE ON tab2 FROM user2, user3;


--  删除表和用户
DROP TABLE tab2;
DROP USER user2;
DROP USER user3;

示例3: 回收角色权限

--  清理环境
DROP ROLE role3;
DROP TABLE tab3 CASCADE;

--  创建表
CREATE TABLE tab3(a INT);

--  创建角色
CREATE ROLE role3;

--  授权
GRANT SELECT, UPDATE ON tab3 TO ROLE role3;

--  回收角色权限
REVOKE UPDATE ON tab3 FROM ROLE role3;


--  删除表和角色
DROP TABLE tab3;
DROP ROLE role3;

示例4: 回收级联授权选项

--  清理环境
DROP TABLE tab4 CASCADE;
DROP USER user4 CASCADE;

--  创建表
CREATE TABLE tab4(a INT);

--  创建用户
CREATE USER user4;

--  授权
GRANT SELECT, UPDATE ON tab4 TO user4;

--  回收级联授权选项
--  用户 user4 不再能把 tab4 上的 SELECT 权限授权给其他用户
--  但是用户 user4 还有 tab4 上的 SELECT 权限
REVOKE GRANT OPTION FOR SELECT ON tab4 FROM user4;


--  删除表和用户
DROP TABLE tab4;
DROP USER user4;

示例5: 回收所有权限

--  清理环境
DROP TABLE tab5 CASCADE;
DROP ROLE role5;

--  创建表
CREATE TABLE tab5(a INT);

--  创建角色
CREATE ROLE role5;

--  授权
GRANT SELECT, UPDATE ON tab5 TO ROLE role5;

--  回收 role5 在 tab5 上的所有权限
REVOKE ALL ON tab5 FROM ROLE role5;


--  删除表和角色
DROP TABLE tab5;
DROP ROLE role5;

示例6: 级联回收权限

--  清理环境
DROP TABLE tab6 CASCADE;
DROP USER user7 CASCADE;
DROP USER user6 CASCADE;

--  创建表
CREATE TABLE tab6(a INT);

--  创建角色
CREATE USER user6 WITH PASSWORD 'abc123!';
CREATE USER user7;

--  授权
GRANT SELECT, UPDATE ON SYSDBA.tab6 TO user6 WITH GRANT OPTION;

--  以 user6 登录
CONNECT user6/abc123!;

--  为 user7 授权
GRANT SELECT, UPDATE ON SYSDBA.tab6 TO user7;


--  以 sysdba 登录
CONNECT sysdba/szoscar55;

--  级联回收权限 —— 收回 user6 的权限,同时收回了 user7 的权限
REVOKE SELECT ON tab6 FROM user6 CASCADE;

--  删除表和用户
DROP TABLE tab6;
DROP USER user7;
DROP USER user6;

示例7: 回收数据库链接权限

--  以 sysdba 登录
CONNECT sysdba/szoscar55;

--  清理环境
DROP USER user8 CASCADE;


--  创建用户
CREATE USER user8;


--  授予用户创建PUBLIC和普通数据库链接权限和删除public数据库链接权限
GRANT CREATE PUBLIC DATABASELINK TO user8;

GRANT CREATE DATABASELINK TO user8;

GRANT DROP PUBLIC DATABASELINK TO user8;

--  回收用户创建PUBLIC和普通数据库链接权限和删除public数据库链接权限
REVOKE CREATE PUBLIC DATABASELINK FROM user8;

REVOKE CREATE DATABASELINK FROM user8;

REVOKE DROP PUBLIC DATABASELINK FROM user8;


--  删除用户
DROP USER user8;