版本:latest

GRANT

功能说明

在数据库管理中,使用grant命令将系统权限或角色分配给用户或其他角色,实现权限的灵活控制。 用户或角色没有被授予SYS用户对象的权限的时候,用户无权将SYS用户对象的权限传递授权给其他用户或角色。

使用须知

(1)授权系统权限,用户执行相关语句之前应满足下述条件之一: -- 已被授权相关系统权限,且拥有WITH ADMIN OPTION属性。 -- 已被授权系统权限GRANT ANY PRIVILEGE。

(2)授权角色,用户执行相关语句之前应满足下述条件之一: -- 已被授权相关角色,且拥有WITH ADMIN OPTION属性。 -- 已被授权系统权限GRANT ANY ROLE。 -- 为相关角色的创建者。

(3)当用户尝试访问其他用户下的对象时,数据库会先检查被访问用户下的对象是否存在: -- 如果对象不存在,返回对象不存在的错误。

(4)对象所有者默认拥有对其所辖对象的完整控制权,包括将权限授予其他用户。

(5)单个用户可被授予的对象权限数量为2048 * 2048,一个用户接受另一个用户的满规格的对象权限授权,数据启动时需要权限加载, 将会延长启动时间。

语法结构

GRANT { ALL [ PRIVILEGES ] |{ system_privilege_name | role_name } [ , ... ] } TO grantee [ WITH ADMIN OPTION ]

-- grantee 子句: { user_name | role_name } [ , ... ]

GRANT { object_privilege_name | ALL [PRIVILEGES] } [, ...] ON [object_type] [schema_name.]object_name TO grantee [ WITH GRANT OPTION ]

-- object_privilege_name 子句: { SELECT | UPDATE | DELETE | INSERT | ALTER | INDEX | EXECUTE | READ | REFERENCES } [, ... ]

-- object_type子句 [ TABLE | VIEW | SEQUENCE | PACKAGE | PROCEDURE | FUNCTION ]

-- grantee 子句: { user_name | role_name } [ , ... ] GRANT { READ } ON DIRECTORY dir_name TO grantee [ WITH GRANT OPTION ]

-- grantee 子句 { user_name | role_name } [ , ... ]

参数解释

system_privilege_name

系统权限名称。下表展示了系统目前支持的系统权限以及角色或用户对权限的拥有情况,其中“T”表示拥有此权限,“F”表示没有权限。

系统权限表

系统权限角色是否拥有该权限用户是否拥有该权限
操作权限权限解释DBARESOURCECONNECTSYSPUBLIC
创建会话CREATE SESSION新建用户需要授权该权限以便连接数据库TFTTF
创建用户CREATE USER需要授权该权限以便创建用户TFFTF
创建角色CREATE ROLE需要授权该权限以便创建角色TFFTF
创建表空间CREATE TABLESPACE需要授权该权限以便创建表空间TFFTF
创建表CREATE TABLE需要授权该权限以便创建本schema中的表TTFTF
创建任意表CREATE ANY TABLE需要授权该权限以便创建其他schema中的表TFFTF
创建索引CREATE ANY INDEX创建本schema中的索引,满足下述条件之一:被索引的表在本schema中。有CREATE ANY INDEX权限,如果创还能其他schema中的索引,该条件为必须。TFFTF
创建序列CREATE SEQUENCE需要授权该权限以便创建本schema中的序列TTFTF
创建任意序列CREATE ANY SEQUENCE需要授权该权限以便创建其他schema中的序列TFFTF
创建视图CREATE VIEW需要授权该权限以便创建本schema中的视图TFFTF
创建任意视图CREATE ANY VIEW需要授权该权限以便创建其他schema中的视图。普通用户基于sys表创建视图,需要补充权限:如果ENABLE_ACCESS_DC=FALSE,需要sys表的select对象权限,否则需要sys表的select权限(对象权限或系统权限)TFFTF
创建控制文件CREATE CTRLFILE在nomount状态下,可由sys用户在文件缺失的状态下创建控制文件,不允许重复创建。TFFTF
创建数据库实例CREATE DATABASE在nomount状态下,可由sys用户创建一个数据库实例,不允许重复创建。TFFTF
创建数据库链接CREATE DATABASE LINK需要授权该权限以便创建数据库链接TFFTF
创建同义词CREATE SYNONYM, CREATE ANY SYNONYM, CREATE PUBLIC SYNONYM创建本schema下的同义词,有三个之一即可。创建其他schema下的同义词,需要有CREATE ANY SYNONYM权限。创建公共同义词,需要有CREATE PUBLIC SYNONYM权限。TFFTF
创建函数/存储过程/自定义高级包CREATE PROCEDURE需要授权该权限以便创建本schema下的函数/存储过程/自定义高级包TTFTF
创建任意函数/存储过程/自定义高级包CREATE ANY PROCEDURE需要授权该权限以便创建其他schema下的函数/存储过程/自定义高级包TFFTF
删除用户DROP USER需要授权该权限以便删除用户TFFTF
删除表空间DROP TABLESPACE需要授权该权限以便删除表空间TFFTF
删除表DROP ANY TABLE用户默认可以删除自身schema下的表,删除其他用户下的表需要该权限TFFTF
删除索引DROP ANY INDEX用户默认可以删除自身schema下的索引,删除其他用户下的索引需要该权限TFFTF
删除序列DROP ANY SEQUENCE用户默认可以删除自身schema下的序列,删除其他用户下的序列需要该权限TFFTF
删除视图DROP ANY VIEW用户默认可以删除自身schema下的视图,删除其他用户下的视图需要该权限TFFTF
删除同义词DROP ANY SYNONYM, DROP PUBLIC SYNONYM用户默认可以删除自身schema下的同义词,删除其他用户下的同义词需要DROP ANY SYNONYM,删除公共同义词需要DROP PUBLIC SYNONYM。系统仅支持删除公共同义词TFFTF
删除角色DROP ANY ROLE用户默认可以删除自身schema下的角色,删除其他用户下的角色需要该权限,或者需要用户已被授予该角色,且具有WITH GRANT OPTIONTFFTF
删除数据库链接DROP DATABASE LINK需要授权该权限以便删除数据库链接TFFTF
锁表LOCK ANY TABLE用户默认可以锁定自身schema下的表,锁定其他用户下的表需要该权限TFFTF
清空表DROP ANY TABLE用户默认可以通过TRUNCATE TABLE删除自身schema下的表中的所有行,删除其他用户下的表需要该权限TFFTF
闪回表FLASHBACK ANY TABLE闪回自身schema下的表,所需权限与DROP TABLE相同;闪回其他用户下的表需要该权限。说明:后续根据FLASHBACK TABLE操作的同步类型(SCN/TIMESTAMP/BEFORE)区分所需不同权限。TFFTF
清除操作DROP ANY TABLE, DROP ANY INDEX, DROP TABLESPACE, PURGE DBA_RECYCLEBINPURGE支持:表、索引、表空间、回收站。用户默认可以清除自身schema下的对象,删除其他用户下的对象需要对应的权限。TFFTF
删除函数/存储过程/自定义高级包DROP ANY PROCEDURE用户默认可以删除自身schema下的函数/存储过程/自定义高级包,删除其他用户下的视图需要该权限TFFTF
修改会话参数ALTER SESSION当前会话默认拥有所有参数的修改权限。该权限预留TFFTF
修改表空间ALTER TABLESPACE需要授权该权限以便修改表空间TFFTF
修改系统属性ALTER SYSTEM需要授权该权限以便修改系统属性TFFTF
修改数据库ALTER DATABASE需要授权该权限以便修改数据库属性TFFTF
修改数据库链接ALTER DATABASE LINK需要授权该权限以便修改数据库链接TFFTF
修改用户信息ALTER USER用户默认可以修改自身的密码,修改其他用户下的密码需要该权限TFFTF
修改表ALTER ANY TABLE用户默认可以修改自身schema下的表,修改其他用户下的表需要该权限或者表的ALTER对象权限TFFTF
修改索引ALTER ANY INDEX用户默认可以修改自身schema下的索引的属性,修改其他用户下的索引属性需要该权限TFFTF
修改序列ALTER ANY SEQUENCE用户默认可以修改自身schema下的序列,修改其他用户下的序列需要该权限或者序列的ALTER对象权限TFFTF
访问序列SELECT ANY SEQUENCE用户默认可以访问自身schema下的序列,访问其他用户下的序列需要该权限TFFTF
授权操作GRANT ANY PRIVILEGE, GRANT ANY ROLE, GRANT ANY OBJECT PRIVILEGE授予系统权限时执行系统权限授予语句的用户,需满足以下任一条件:已被授予该系统权限,且附带 WITH ADMIN OPTION 属性;自身已被授予 GRANT ANY PRIVILEGE 系统权限。授予角色时执行角色授予语句的用户,需满足以下任一条件:已被授予该角色,且附带 WITH ADMIN OPTION 属性;自身已被授予 GRANT ANY ROLE 系统权限;是该角色的创建者。拥有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户,可将任意用户名下的对象权限,授予其他用户。TFFTF
回收权限操作GRANT ANY PRIVILEGE, GRANT ANY ROLE执行回收系统权限语句的用户,需满足以下任一条件:已被授予该系统权限,且附带 WITH ADMIN OPTION 属性;自身已被授予 GRANT ANY PRIVILEGE 系统权限。执行回收角色语句的用户,需满足以下任一条件:已被授予该角色,且附带 WITH ADMIN OPTION 属性;自身已被授予 GRANT ANY ROLE 系统权限;是该角色的创建者。TFFTF
更改PROFILE属性ALTER PROFILE需要授权该权限以便更改profile属性TFFTF
创建PROFILECREATE PROFILE需要授权该权限以便创建profileTFFTF
删除PROFILEDROP PROFILE需要授权该权限以便删除profileTFFTF
读取sys用户的表或视图数据SELECT ANY DICTIONARY需要授权该权限以便查询sys用户的表或视图TFFTF
读取任意表或视图数据READ ANY TABLE, SELECT ANY TABLE拥有该权限的用户可查询任意表或视图数据。SYS表的访问受参数ENABLE_ACCESS_DC管控(默认TRUE,仅 SYS 用户可修改;DBA 角色不受ENABLE_ACCESS_DC限制),ENABLE_ACCESS_DC=TRUE → SELECT ANY TABLE可访问SYS对象,ENABLE_ACCESS_DC=FALSE → SELECT ANY TABLE不可访问SYS对象。含FOR UPDATE子句的查询,仅限拥有SELECT ANY TABLE权限的用户查询。TFFTF
注释权限COMMENT ANY TABLE用户默认可以注释自身schema下的表,注释其他用户下的表需要该权限TFFTF
更新表数据UPDATE ANY TABLE需要授权该权限以便更新任意表的数据TFFTF
插入表数据INSERT ANY TABLE需要授权该权限以便向任意表中插入数据TFFTF
删除表数据DELETE ANY TABLE需要授权该权限以便删除任意表的数据TFFTF
备份操作SYSBACKUP, SYSDBA需要授权该权限以便执行备份操作。ENABLE_SYSDBA_REMOTE_LOGIN开启时,当参数ENABLE_SYSDBA_REMOTE_LOGIN处于开启状态时,持有 SYSDBA 权限的用户可通过AS SYSDBA方式完成登录,登录后该用户将升级为 SYS 用户,并获得 SYS 用户的全部权限。TFFTF
恢复操作SYSDBA需要授权该权限以便执行恢复操作TFFTF
停止数据库SYSDBA需要授权该权限以便执行停止数据库操作TFFTF
重建备机SYSDBA需要授权该权限以便执行重建备机操作TFFTF
物理备份集的合法性校验SYSDBA需要授权该权限以便执行物理备份集的合法性校验操作TFFTF
分析表操作ANALYZE ANY用户默认可以分析自身schema下的表,分析其他用户(sys用户除外)下的表需要该权限,分析sys用户表需要DBA权限。TFFTF
修改触发器ALTER ANY TRIGGER用户默认可以修改自身schema下的触发器,修改其他用户下的触发器需要该权限TFFTF
创建触发器CREATE TRIGGER需要授权该权限以便创建属于自己的触发器TTFTF
创建触发器CREATE ANY TRIGGER需要授权该权限以便创建属于其他用户的触发器TFFTF
删除触发器DROP ANY TRIGGER用户默认可以删除自身schema下的触发器,删除其他用户下的触发器需要该权限TFFTF
执行函数/存储过程/自定义高级包EXECUTE ANY PROCEDURE用户默认可以执行自身schema下的函数/存储过程/自定义高级包,修改其他用户下的需要该权限或者指定函数/存储过程/自定义高级包的execute对象权限。TFFTF
修改存储过程ALTER ANY PROCEDURE该权限预留TFFTF
修改物化视图ALTER ANY MATERIALIZED VIEW该权限预留TFFTF
创建物化视图CREATE ANY MATERIALIZED VIEW, CREATE MATERIALIZED VIEW该权限预留TFFTF
删除物化视图DROP ANY MATERIALIZED VIEW该权限预留TFFTF
修改角色属性ALTER ANY ROLE该权限预留TFFTF
闪回归档FLASHBACK ARCHIVE ADMINISTER该权限预留TFFTF
全局查询重写GLOBAL QUERY REWRITE该权限预留TFFTF
管理表空间MANAGE TABLESPACE该权限预留TFFTF
物化视图创新ON COMMIT REFRESH该权限预留TFFTF
无限制使用表空间UNLIMITED TABLESPACE该权限预留TFFTF
创建子视图UNDER ANY VIEW该权限预留TFFTF
系统操作员权限SYSOPER该权限预留TFFTF
创建自定义类型CREATE TYPE, CREATE ANY TYPE用户创建自身schema下的自定义类型需要CREATE TYPE权限,创建其他用户下的自定义类型需要CREATE ANY TYPE权限TFFTF
使用自定义类型EXECUTE ANY TYPE用户默认可以使用自身schema下的自定义类型,使用其他用户下的自定义类型需要该权限或者指定类型的EXECUTE对象权限TFFTF
删除自定义类型DROP ANY TYPE用户默认可以删除自身schema下的自定义类型,删除其他用户下的自定义类型需要该权限TFFTF
脱敏规则EXEMPT REDACTION POLICY用户不受脱敏规则的影响且可以查看原数据的前提是拥有该权限TFFTF
调用者权限INHERIT ANY PRIVILEGES持有INHERIT ANY PRIVILEGES权限的用户,其名下所有对象(包括触发器、存储过程、自定义函数、自定义高级包),会被其他所有用户认定为不包含风险操作。FFFTF
安全策略EXEMPT ACCESS POLICY持有EXEMPT ACCESS POLICY权限的用户可以免除安全策略的限制TFFTF
操作事务FORCE ANY TRANSACTION持有FORCE ANY TRANSACTION权限的用户,可对其他用户发起的未完成事务,执行强制提交或强制回滚操作。TFFTF
使用表空间USE ANY TABLESPACE持有USE ANY TABLESPACE权限的用户,在创建表、索引等数据库对象时,可将表空间指定为SYSTEM或SYSAUX表空间。TFFTF

解释

-- SYS 用户默认拥有前文所述的全部权限。

1、同义词权限规则 同义词的权限与其所指向的对象权限完全一致: (1)将同义词权限授予用户,等同于将该同义词对应对象的权限授予该用户。 (2)反之,将某对象权限授予用户时,若该对象存在同义词,则该同义词的权限也会同步授予该用户。 (3)访问同义词时,系统会校验当前操作用户是否具备该同义词对应对象的权限。

2、角色权限继承规则 (1)角色授予:将角色授予用户 / 其他角色后,该用户 / 角色会继承该角色的全部权限(含系统权限、已授予的所有对象权限)。 (2)角色回收:从用户 / 角色处回收某角色时,该用户 / 角色通过此角色继承的权限会被撤销;若同一权限可从其他角色继承,则回收该角色后,用户 / 角色仍保留该权限。

3、对象 / 用户 / 角色删除的权限联动规则 (1)对象删除:删除表、视图、序列、存储过程时,用户 / 角色所持有的该对象权限会被同步删除。 (2)用户删除:删除用户时,其名下所有对象会被一并删除,其他用户被授予的这些对象的权限也会同步撤销。 (3)角色删除:删除角色时,该角色被授予的所有权限会被清除,且被授予该角色的用户 / 角色对应的权限也会同步回收。

4、视图创建与访问的权限要求 (1)视图创建: 基础权限:当前用户需具备 CREATE VIEW(创建自身视图)或 CREATE ANY VIEW(创建任意用户视图)系统权限; 依赖权限:视图所有者(可为当前用户或其他用户)需对视图中引用的对象拥有 SELECT 权限。 (2)视图访问: 基础权限:用户需具备该视图的 SELECT/SELECT ANY TABLE 权限,或 READ/READ ANY TABLE 权限; 依赖权限:视图所有者需对视图中引用的对象拥有 SELECT 权限。

5、存储过程 / 自定义函数 / 触发器的权限规则 (1)创建阶段:创建存储过程、自定义函数、触发器时,不校验对依赖对象的访问权限(如果权限不足会有告警)。 (2)执行阶段:执行存储过程、调用自定义函数,或触发器触发执行时,会校验当前用户对依赖对象的访问权限。 (3)跨用户创建触发器:若在其他用户的表上创建触发器,创建者需被授予 CREATE ANY TRIGGER 权限。

6、对象权限通用检查规则 对象所有者默认拥有该对象的全部权限,不同操作的权限要求如下: (1)SELECT:访问自身对象无需授权;访问其他用户对象,需具备该对象的 SELECT 权限或 SELECT ANY TABLE 系统权限。 (2)UPDATE:更新自身对象无需授权;更新其他用户对象,需具备该对象的 UPDATE 权限或 UPDATE ANY TABLE 系统权限。 (3)DELETE:删除自身对象数据无需授权;删除其他用户对象数据,需具备该对象的 DELETE 权限或 DELETE ANY TABLE 系统权限。 (4)INSERT:向自身对象插入数据无需授权;向其他用户对象插入数据,需具备该对象的 INSERT 权限或 INSERT ANY TABLE 系统权限。 (5)ALTER:修改自身对象定义无需授权;修改其他用户对象,需具备该对象的 ALTER 权限或 ALTER ANY TABLE 系统权限。 (6)INDEX:创建索引时,需具备该对象的 INDEX 权限。 (7)EXECUTE: 执行存储过程、调用自定义函数 / 系统包函数时,需具备该对象的 EXECUTE 权限。 (8)READ:访问对象的权限,与 SELECT 权限功能近似;区别在于:语句含 FOR UPDATE 子句时需 SELECT 权限,无该子句时 SELECT 与 READ 权限等效。 (9)REFERENCES:创建外键约束时,需具备被引用对象的 REFERENCES 权限。

-- 非 SYS 用户即便持有相关权限,也无法在 SYS 用户的 schema 中创建对象,亦不能对 SYS 用户的对象执行操作;仅当 SYS 用户单独将对应对象的权限授予非 SYS 用户后,后者才可对 SYS 对象进行操作。

CREATE ANY TABLE CREATE ANY INDEX CREATE ANY SEQUENCE CREATE ANY VIEW CREATE ANY SYNONYM CREATE ANY PROCEDURE DROP ANY TABLE DROP ANY INDEX DROP ANY SEQUENCE DROP ANY VIEW DROP ANY SYNONYM LOCK ANY TABLE DROP ANY PROCEDURE ALTER ANY TABLE ALTER ANY INDEX ALTER ANY SEQUENCE UPDATE ANY TABLE INSERT ANY TABLE DELETE ANY TABLE ANALYZE ANY ALTER ANY TRIGGER CREATE ANY TRIGGER DROP ANY TRIGGER EXECUTE ANY PROCEDURE CREATE ANY TYPE EXECUTE ANY TYPE DROP ANY TYPE

须知

以下权限授予操作属于高危操作,需谨慎执行:

CREATE ANY TABLE CREATE ANY INDEX CREATE ANY SEQUENCE CREATE ANY VIEW CREATE ANY SYNONYM CREATE ANY PROCEDURE DROP ANY TABLE DROP ANY INDEX DROP ANY SEQUENCE DROP ANY VIEW DROP ANY SYNONYM LOCK ANY TABLE DROP ANY PROCEDURE ALTER ANY TABLE ALTER ANY INDEX ALTER ANY SEQUENCE UPDATE ANY TABLE INSERT ANY TABLE DELETE ANY TABLE ANALYZE ANY ALTER ANY TRIGGER CREATE ANY TRIGGER DROP ANY TRIGGER EXECUTE ANY PROCEDURE CREATE ANY TYPE EXECUTE ANY TYPE DROP ANY TYPE SYSDBA GRANT ANY PRIVILEGE GRANT ANY ROLE EXEMPT REDACTION POLICY EXEMPT ACCESS POLICY SELECT ANY DICTIONARY ALTER USER DROP USER

role_name

-- 角色授权相关规则说明 (1)角色定义与授权效果:role_name(角色名)相关说明参考 ROLE 语句文档。将某角色授予用户 / 其他角色时,被授权的用户 / 角色将继承该角色包含的全部系统权限。 (2)授权限制:角色间授权禁止循环操作,例如禁止以下场景:将 roleA 授予 roleB、roleB 授予 roleC、roleC 授予 roleA。 (3)系统预置角色:系统默认包含以下角色:dba、resource、connect。其中 DBA 角色拥有全部系统权限,向普通用户授予该角色时需谨慎操作。

ALL [ PRIVILEGES ]

该关键字代表全部系统权限、对象权限,其中 PRIVILEGES 关键字可省略。

[schema_name.]

该参数代表目标用户名,若未显式指定,则默认取值为当前登录用户。

[WITH ADMIN OPTION]

-- 该选项的具体含义如下 (1)权限传递:被授权者(grantee)获得将该系统权限 / 角色再次授予其他用户或角色的权限(即实现 grant 权限的传递);回收该权限时,不会级联撤销该被授权者此前授予其他用户的相关权限。 (2)自主撤销:被授权者(grantee)可自行删除其持有的该系统权限或角色。 (3)操作限制:该选项设置后,仅能通过 REVOKE 语句回收整个权限,无法仅撤销该选项而保留基础权限。

object_privilege_name

对象权限的名称。不同类型的数据库对象,其对应的权限集合存在差异。当前系统支持的对象类型包括:表、视图、序列、存储过程、函数、触发器、自定义类型。 各类对象所支持的操作权限详见下表。表中标识说明如下:T:代表该对象支持此项权限;F:代表该对象不支持此项权限;该权限预留:代表此项权限为该对象的预留权限。 补充说明:对象所有者、系统管理员(SYS 用户、DBA 角色)默认拥有下表中所有对象的全部权限。

对象权限对照表

对象类型SELECTUPDATEINSERTDELETEINDEXREADREFERENCESALTEREXECUTEWRITE
TTTTTTTTFF
视图T该权限预留该权限预留该权限预留FT该权限预留FFF
序列TFFFFFFTFF
存储过程FFFFFFFFTF
触发器FFFFFFFFTF
函数FFFFFFFFTF
自定义类型FFFFFFFFTF

-- 使用 GRANT ALL PRIVILEGES 语句为用户授予某对象权限时,系统会依据该对象的类型,确定需要授予 / 回收的权限集合。

-- 若将对象权限授予 PUBLIC,则系统内所有用户(包括授权操作后新增的用户)都会获得该对象的对应权限,此操作需谨慎执行。可通过以下 SQL 语句查询数据库安装后 PUBLIC 用户的默认权限: select * from ADM_TAB_PRIVS where GRANTEE='PUBLIC';

object_type

对象类型名称。若未显式指定该参数,系统将按照表→视图→序列→存储过程→函数的优先级顺序查找对应对象。

grantee

-- 基础规则 grantee 指权限的被授予方,可指定为用户或角色。若将 grantee 指定为 PUBLIC,则表示将权限授予系统内所有用户(含授权操作后新增的用户),此操作需谨慎执行。

WITH GRANT OPTION

-- 被授权用户获得权限传递能力,可将该权限再次授予其他用户或角色

-- 权限回收时将触发级联效应,即回收该用户权限的同时,会同步撤销其通过此选项授予其他主体的权限

-- 该选项一旦配置,仅可通过 REVOKE 语句整体回收对应权限,无法单独取消该选项而保留基础权限

样例

-- 创建用户songjiang,并将CREATE SESSION权限授权给用户songjiang

-- 删除用户songjiang

DROP USER songjiang CASCADE;

-- 创建用户songjiang,密码是"ghQMO789"

CREATE USER songjiang IDENTIFIED BY "ghQMO789";

-- 将CREATE SESSION权限授权给用户songjiang

GRANT CREATE SESSION TO songjiang;

-- 创建用户wusong、用户wukong和角色bajie,并将角色bajie授权给用户wusong和用户wukong

-- 删除角色bajie

DROP ROLE bajie;

-- 创建角色bajie

CREATE ROLE bajie;

-- 将权限CREATE SESSION、CREATE USER、CREATE ROLE、CREATE TABLE授予角色bajie

GRANT CREATE SESSION, CREATE USER, CREATE ROLE, CREATE TABLE TO bajie;

-- 删除用户wusong

DROP USER wusong CASCADE;

--创建用户wusong,密码是"GHPihb570"

CREATE USER wusong IDENTIFIED BY "GHPihb570";

-- 删除用户wukong

DROP USER wukong CASCADE;

-- 创建用户wukong,密码是"XBYgh450"

CREATE USER wukong IDENTIFIED BY "XBYgh450";

-- 将角色bajie授予用户wusong和用户wukong

GRANT bajie TO wusong, wukong;

-- 创建表officer,创建用户tangseng,并赋予用户tangseng对此表的插入权限

--删除表officer

DROP TABLE IF EXISTS officer;

--创建表officer

CREATE TABLE officer (office_id NUMBER(8), first_name VARCHAR2(20), last_name VARCHAR2(25) CONSTRAINT off_last_name_nn NOT NULL, email VARCHAR2(25) CONSTRAINT off_email_nn NOT NULL, monile_no VARCHAR2(20), hire_date DATE DEFAULT SYSDATE CONSTRAINT off_hire_date_nn NOT NULL, job_id VARCHAR2(10) CONSTRAINT off_job_nn NOT NULL, salary NUMBER(10,2) CONSTRAINT off_salary_nn NOT NULL, pct NUMBER(4,2), manager_id NUMBER(8), dept_id NUMBER(6), dn VARCHAR2(300), CONSTRAINT off_email_uk UNIQUE (email) ) ;

-- 删除用户tangseng

DROP USER tangseng CASCADE;

-- 创建用户tangseng,密码是"minBY78fg"

CREATE USER tangseng IDENTIFIED BY "minBY78fg";

-- 赋予用户tangseng对表officer的插入权限

GRANT INSERT ON officer TO tangseng;