ORA-01950: no privileges on tablespace

ORA-01950: no privileges on tablespace


关于grant授权转移不了系统权限 tablespace的问题

我是从sysdba授权给temp的。
sql>grant create table,create session ,execute any procedure to temp;
1  SQL> create table emp1(

2  empno number(4) primary key,

3  ename varchar2(10) not null,

4  deptno number(2)

5  );
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'
解决方法就是增加用户在表空间的使用量限制。
sql>connect   /    as sysdba
sql>alter user temp quota unlimited on users;
User altered.

1  SQL> create table emp1(

2  empno number(4) primary key,

3  ename varchar2(10) not null,

4  deptno number(2)

5  );

Table created.

下面在网上看到的情况差不多。


如 果用户只具有connect和resource角色,一样是创建不了表的,只所以用户被授予connect,resource角色后能够创建表,是因为在 授予resource角色的时候系统自动给用户赋予了unlimited tablespace这个系统权限,也就是用户可以使用存储空间了。
而你通过角色传递角色的时候,unlimited tablespace 这个系统权限是不能通过角色传递的,所以用户在授予了角色后只有connect,resource角色,而没有对空间的使用权限。
这个你可以用select * from session_privs;

一个例子
SQL> create table temp_a(a int);
create table temp_a(a int)
*
ERROR 位于第 1 行:
ORA-01950: no privileges on tablespace 'TBSCCDBDFLT'
然后执行
grant resource to USER_A,再执行,成功建表。
--如果,revoke resource from user_a; grant resource to role_a; gran role_a to user_a;不管用。
回复ORA-600
按照你的意思,不能把unlimited tablespace权限通过角色传递,那在定义每个用户的时候都要显式的这么分配一下,比较麻烦,而且如果用户一多,管理起来很乱,不如角色来得直接。有没有其他的办法?

你可能感兴趣的:(sql,session,user,table,null,存储)