2、grant/revoke角色不会立即生效,需要使用set role或者重新登录才生效(直接授予系统权限、对象权限是立即生效)。
二、回收DBA角色时的影响
继续上面的实验,在session 1中授予和回收用户DBA角色,session 2重新登录用户
-
session 1:
-
SQL> grant dba to darren;
-
Grant succeeded.
-
SQL> revoke dba from darren;
-
Revoke succeeded.
-
session 2:
-
SQL> conn darren/darren
-
Connected.
-
SQL> select count(*) from session_privs;
-
COUNT(*)
-
----------
-
9
-
SQL> select * from session_roles;
-
ROLE
-
------------------------------
-
CONNECT
-
RESOURCE
-
SQL> select * from session_privs; --注意,这里没有了UNLIMITED TABLESPACE权限
-
PRIVILEGE
-
----------------------------------------
-
CREATE SESSION
-
CREATE TABLE
-
CREATE CLUSTER
-
CREATE SEQUENCE
-
CREATE PROCEDURE
-
CREATE TRIGGER
-
CREATE TYPE
-
CREATE OPERATOR
-
CREATE INDEXTYPE
在session 2中创建表并插入数据
-
SQL> create table test1(a varchar2(20),b varchar2(10)); --这里能创建成功是由于11g的延迟段创建特性,在这里并没有在表空间中实际生成segment
-
Table created.
-
SQL> insert into test1 values(‘a‘,‘b‘);
-
insert into test1 values(‘a‘,‘b‘)
-
*
-
ERROR at line 1:
-
ORA-01950: no privileges on tablespace ‘USERS‘
结论:1、在回收DBA角色时,UNLIMITED TABLESPACE权限会被回收;
2、回收
UNLIMITED TABLESPACE权限后用户的表空间quota立即耗尽,即无法使用tablespace的存储空间。
三、回收DBA权限后的处理
1、由于回收DBA权限后用户的UNLIMITED TABLESPACE系统权限被回收,可以按下列方式之一给用户授权,以便用户能正常使用表空间:
-
SQL> grant RESOURCE to DARREN;
-
SQL> alter user DARREN quota unlimited on USERS;
-
SQL> grant UNLIMITED TABLESPACE to DARREN;
2、如果应用用户有特殊的权限需求,需要在回收DBA角色后单独为用户授予部分系统权限、对象权限。