REVOKE¶
说明¶
收回已经授予的权限,即撤销授权。
参数¶
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;