刚学习oracle不久,对于权限碰到一个问题,我创建了一个表空间TESTTABLESPACE,创建了一个用户test1,test1的默认表空间为TESTTABLESPACE,就是刚刚新建的那个,然后新建了一个角色developer,然后为developer授权,grant resources,connect to developer,执行成功后,然后用developer为test1授权,再用test1登录,登录成功后想创建一个新表,但是发现不能创建,提示我没有权限在TESTTABLESPACE这个表空间里面创建表。请高手帮我解答一下,这是什么原因。
Oracle 授权
------解决方案--------------------
还需要给用户分配表空间限额:
GRANT UNLIMITED TABLESPACE TO TEST1;
或者
ALTER USER TEST1 QUOTA UNLIMITED ON TESTTABLESPACE;
------解决方案--------------------
好吧,我错了,resource 是包含create table权限的。
通过角色赋权是隐式赋权, 有些时候必须显示赋权才可以。。不过我也没有怎么理透原理
------解决方案--------------------
您好,按照您的描述,创建用户后是可以创建表的。
--SYS/SYSDBA
create tablespace test
datafile 'C:\app\Administrator\oradata\orcl\test01.dbf' size 5M
default storage(initial 5M
next 5M
minextents 2
maxextents 10
pctincrease 20) online;
CREATE USER TEST1 IDENTIFIED BY TEST1
DEFAULT TABLESPACE TEST;
CREATE ROLE DEVELOPER;
GRANT RESOURCE,CONNECT TO DEVELOPER;
grant developer to test1;
--TEST1/TEST1
CREATE TABLE T(IDX INT);
SELECT * FROM T;
------解决方案--------------------
查看test1是否有创建表的权限。select * from session_privs;
既然楼主直接用connect和resource给test1授权可以创建表,就说明楼主在developer授权这步或者在创建默认表空间这步出了问题,具体的楼主可以贴出具体步骤。。
我根据你的描述,自己试了一下create table t1(name varchar2(10));
Table created.select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------- ---------------
T1 TESTselect username,default_tablespace from user_users;