http://www.itpub.net/forum.php?mod=redirect&goto=findpost&ptid=1431917&pid=17741257有关于unlimited tablespace的一些解释
注意:授予resource角色的时候也会授予unlimited tablespace权限,但unlimited tablespace权限并不属于resource角色。
1、系统权限unlimited tablespace是隐含在dba和resource角色中的一个系统权限。当用户得到dba或resource的角色时, unlimited tablespace系统权限也隐式受权给用户。实验一下:
SQL> create user test01 identified by a
2 default tablespace test01;
SQL> grant connect,resource to test01;
SQL> select * from dba_role_privs where grantee='TEST01';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST01 RESOURCE NO YES
TEST01 CONNECT NO YES
SQL> select * from dba_sys_privs where grantee='TEST01'; //可以看到有UNLIMITED TABLESPACE权限
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
TEST01 UNLIMITED TABLESPACE NO
SQL> conn test01/a
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
已选择10行。
SQL> select * from role_sys_privs; //可以看到unlimited tablespace并不属于resource
ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
CONNECT CREATE SESSION NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO
已选择9行。
2、系统权限unlimited tablespace不能被授予role(即使提示授权成功但实际上没有), 可以被授予用户。
系统权限unlimited tablespace不会随着resource, dba被授予role而授予给用户。
SQL> create user test02 identified by a
2 default tablespace test01;
SQL> create role re_test;
SQL> grant resource to re_test;
SQL> grant connect,re_test to test02;
SQL> select * from dba_role_privs where grantee='TEST02';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST02 CONNECT NO YES
TEST02 RE_TEST NO YES
SQL> select * from dba_sys_privs where grantee='TEST02';
未选定行
SQL> conn test02/a
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
已选择10行。
SQL> select * from role_sys_privs;
ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RE_TEST UNLIMITED TABLESPACE NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
CONNECT CREATE SESSION NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO
已选择10行。
SQL> alter table test move tablespace test02;
alter table test move tablespace test02
*
第 1 行出现错误:
ORA-01950: 对表空间 'TEST02' 无权限
上面即使有语句提示test02有unlimited tablespace权限但实际操作表空间却会报错:无权限
在这里我们需要关于一个比较重要的权限做一个说明,这个系统权限就是unlimited tablespace
unlimited tablespace的特点:
1、unlimited tablespace系统权限不能包含在一个角色role中
2、unlimited tablespace没有被包括在resource和dba角色中,但是如果将resource或dba角色授予了某个用户,那么这个用户将会拥有unlimited tablespace系统权限。但是如果resource角色授予了某个角色,再将这个角色授予某个用户,那么这个用户将不会拥有unlimited tablespace系统权限。
如果需要为一个用户指定一个限额,可以有两种方法:
1、在创建用户的时候指定限额:
create user test identified by a
default tablespace test
temporary tablespace temp
quota 3m on test;
2、在创建用户完成之后对用户限额进行指定:
create user test05 identified by a;
alter user test05 quota 3m on users;
3、更改用户的表空间限额:
全局:
grant unlimited tablespace to abc;
针对某个表空间:
alter user abc quota unlimited on test;
回收:
revoke unlimited tablespace from abc;
alter user abc quota 0 on test;
对于分配的临时表空间或临时还原表空间则不需要限额。
在此需要注意两个概念:表空间不足和用户配额不足
这两者不是一个概念。表空间的大小是指实际的用户表空间的大小;配额大小是用户指定使用表空间的大小。二者的解决方法也不相同。配额问题的解决:alter user abc auota 2g on tablespace_name;表空间不足的话就是扩展表空间或者增加数据文件了。
与表空间限额先关的数据字典视图:
dba_ts_quotas:描述所有用户表空间配额
user_ts_quotas:描述当前用户表空间配额,这个视图不会显示用户名列
在两个数据字典中,max_bytes字段就是表示表空间限额的值了,单位是B,其中-1代表没有限制
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29674916/viewspace-2119959/ ,如需转载,请注明出处,否则将追究法律责任。