oralce 授权有关问题

oralce 授权问题刚学习oracle不久,对于权限碰到一个问题,我创建了一个表空间TESTTABLESPACE,创建了一个用

oralce 授权问题
    刚学习oracle不久,对于权限碰到一个问题,我创建了一个表空间TESTTABLESPACE,创建了一个用户test1,test1的默认表空间为TESTTABLESPACE,就是刚刚新建的那个,然后新建了一个角色developer,然后为developer授权,grant  resources,connect to developer,执行成功后,然后用developer为test1授权,再用test1登录,登录成功后想创建一个新表,但是发现不能创建,提示我没有权限在TESTTABLESPACE这个表空间里面创建表。请高手帮我解答一下,这是什么原因。oralce 授权有关问题 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 from user_users; 


USERNAME   DEFAULT_TABLESPACE
---------- ---------------------
TEST1      TEST



具体操作
用sys用户登录的,
--创建表空间
create   tablespace TEST_TS  datafile 'E:\oracle\oradata\TESTTABLESPACE1.dbf'
size  10M autoextend  on  next 5m maxsize 20m,
 'E:\oracle\oradata\TESTTABLESPACE2.dbf'
size  10M autoextend  on  next 5m maxsize 20m
--创建用户
create   user test1 identified  by test1 default tablespace TEST_TS
temporary  tablespace  temp;
--创建开发者角色
create  role developer;
--给开发者角色授权
grant   connect,resource to  developer;
--给用户授权
grant developer  to  test1;

就是这么一个步骤
然后用test1用户登录,创建表
create  table  test_T(
t_name  varchar2(10)
)
提示对表空间‘TEST_TS’无权限

贴出步骤果然找到问题了额
刚创建的用户,你没有给用户默认表空间分配quota,就算用create table 权限也是没用的
用sys给test1分配quota
TEST1@xp-ora10g> conn / as sysdba
Connected.
SYS@xp-ora10g> alter user "TEST1" quota 10m on "TEST_TS";

User altered.

SYS@xp-ora10g> conn test1/test1
Connected.
TEST1@xp-ora10g> create table t1(t_name varchar(10));

Table created.
TEST1@xp-ora10g> show user
USER is "TEST1"
TEST1@xp-ora10g> select table_name,tablespace_name from user_tables;

TABLE_NAME                TABLESPACE_NAME
------------------------- ---------------
T1                        TEST_TS

[解决办法]
引用:
Quote: 引用:

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 from user_users;

USERNAME   DEFAULT_TABLESPACE
---------- ---------------------
TEST1      TEST



具体操作
用sys用户登录的,
--创建表空间
create   tablespace TEST_TS  datafile 'E:\oracle\oradata\TESTTABLESPACE1.dbf'
size  10M autoextend  on  next 5m maxsize 20m,
 'E:\oracle\oradata\TESTTABLESPACE2.dbf'
size  10M autoextend  on  next 5m maxsize 20m
--创建用户
create   user test1 identified  by test1 default tablespace TEST_TS


temporary  tablespace  temp;
--创建开发者角色
create  role developer;
--给开发者角色授权
grant   connect,resource to  developer;
--给用户授权
grant developer  to  test1;

就是这么一个步骤
然后用test1用户登录,创建表
create  table  test_T(
t_name  varchar2(10)
)
提示对表空间‘TEST_TS’无权限


贴出步骤果然找到问题了额
刚创建的用户,你没有给用户默认表空间分配quota,就算用create table 权限也是没用的
用sys给test1分配quota
TEST1@xp-ora10g> conn / as sysdba
Connected.
SYS@xp-ora10g> alter user "TEST1" quota 10m on "TEST_TS";

User altered.

SYS@xp-ora10g> conn test1/test1
Connected.
TEST1@xp-ora10g> create table t1(t_name varchar(10));

Table created.
TEST1@xp-ora10g> show user
USER is "TEST1"
TEST1@xp-ora10g> select table_name,tablespace_name from user_tables;

TABLE_NAME                TABLESPACE_NAME
------------------------- ---------------
T1                        TEST_TS
创建用户时,指定了默认表空间,难道还需要分配配额吗?!
[解决办法]
楼上的,你只指定表空间,没有分配表空间使用额度,3楼正解