日期:2014-05-17  浏览次数:20933 次

oralce 授权问题
    刚学习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;

------解决方案--------------------
引用:
Quote: 引用:

创建表 也是需要权限的

grant create any table to ....
但是我直接用connect和resource给test1授权后创建就没有问题啊


好吧,我错了,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;
------解决方案--------------------
引用:
Quote: 引用:

查看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                        TEST

select username,default_tablespace&