REVOKE
功能描述
从被授权主体处回收系统权限或角色。
注意事项
-- 系统权限回收的执行者权限要求: 执行 REVOKE 操作回收系统权限时,操作者需满足以下任一条件: 自身拥有待回收的系统权限,且操作者被授权操作附带 WITH ADMIN OPTION 属性; 自身拥有 GRANT ANY PRIVILEGE 系统权限。
-- 角色回收的执行者权限要求: 执行 REVOKE 操作回收角色时,操作者需满足以下任一条件: 自身拥有该角色,且操作者被授权操作附带 WITH ADMIN OPTION 属性; 自身拥有 GRANT ANY ROLE 系统权限; 是该待回收角色的创建者。
-- 权限存在性校验: 若目标被授权主体不拥有待回收的权限或角色,执行回收操作时系统会触发错误提示。
-- DBA 角色权限限制: DBA 角色的权限不允许回收。该角色的初始权限在数据库创建阶段即已确定;后续可新增授予权限,但已赋予的权限无法执行回收操作。
语法格式
-- 回收系统权限: REVOKE { ALL [ PRIVILEGES ] | { system_privilege_name | role_name } [ , ... ] } FROM revokee revokee 子句:{ user_name | role_name } [ , ... ]
-- 回收对象权限: 回收目录对象权限:REVOKE { READ } ON DIRECTORY dir_name FROM revokee revokee 子句:{ user_name | role_name } [ , ... ] 回收其他对象权限:REVOKE { ALL [ PRIVILEGES ]|{ object_privilege_name [, ...] ON [object_type] [schema_name.]object_name } } FROM revokee object_privilege_name子句:{ SELECT | UPDATE | DELETE | INSERT | ALTER | INDEX | EXECUTE | READ | REFERENCES } [, ... ] object_type子句:[ TABLE | VIEW | SEQUENCE | PACKAGE | PROCEDURE | FUNCTION ] revokee 子句:{ user_name | role_name } [ , ... ]
-- 回收用户INHERIT PRIVILEGES权限: REVOKE INHERIT PRIVILEGES ON USER user_name FROM revokee revokee 子句:{ user_name } [ , ... ]
参数说明
- system_privilege_name:系统权限名称。当前系统支持的所有系统权限。
- role_name:角色名称。参考 ROLE 语句的相关说明,当从用户或其他角色处回收该角色时,意味着删除被回收者(revokee)名下归属于该角色的所有权限。
- ALL [ PRIVILEGES ]:代表全部系统权限,其中 PRIVILEGES 关键字可省略。
- object_privilege_name:对象权限名称。
- object_type:对象类型名称。若未指定该参数,系统将按以下优先级顺序查找对象:表、视图、序列、高级包、存储过程、函数。
- ALL [ PRIVILEGES ]:代表全部对象权限,其中 PRIVILEGES 关键字可省略。
- [ schema_name. ]:用户名。未指定该参数时,默认使用当前登录的用户。
- revokee:被授权者(权限的回收对象),可以是用户或角色;单次操作可指定多个被授权者。
- user_name:被回收权限的目标用户名。
示例
将系统权限从用户wangwu收回
--删除用户wangwu
DROP USER wangwu CASCADE;
--创建用户wangwu
CREATE USER wangwu IDENTIFIED BY "8fgybjjFGgh";
--将系统权限CREATE SESSION、CREATE TABLE、CREATE ANY INDEX、CREATE USER授予用户wangwu
GRANT CREATE SESSION, CREATE TABLE, CREATE ANY INDEX, CREATE USER TO wangwu;
--从受权用户wangwu上回收系统权限CREATE USER
REVOKE CREATE USER FROM wangwu;
将角色从用户zhangfei收回
--删除角色role_test
DROP ROLE role_test;
--创建角色role_test
CREATE ROLE role_test;
--删除用户zhangfei
DROP USER zhangfei CASCADE;
--创建用户zhangfei,密码是"2GHjkGHyv"
CREATE USER zhangfei IDENTIFIED BY "2GHjkGHyv";
--删除用户lvbu
DROP USER lvbu CASCADE;
--创建用户lvbu
CREATE USER lvbu IDENTIFIED BY "fhghj78DC";
--将系统权限CREATE SESSION、CREATE USER、CREATE ROLE、CREATE TABLE、CREATE ANY TABLE、 CREATE ANY INDEX、DROP USER、DROP ANY ROLE、DROP ANY TABLE、DROP ANY INDEX授予角色role_test
GRANT CREATE SESSION, CREATE USER, CREATE ROLE, CREATE TABLE, CREATE ANY TABLE, CREATE ANY INDEX, DROP USER, DROP ANY ROLE, DROP ANY TABLE, DROP ANY INDEX TO role_test;
--将角色role_test授予用户zhangfei和用户lvbu
GRANT role_test TO zhangfei, lvbu;
--从受权用户zhangfei上回收角色role_test
REVOKE role_test FROM zhangfei;