ORACLE11G用户在任何表空间都有创建表的权限问题

在Oracle 11.2.0.1.0中,创建用户aaa并授予connect和resource角色后,尽管收回了unlimited tablespace权限,aaa仍然能在任意表空间创建表。这源于deferred_segment_creation参数默认为true,使得表创建时不立即使用segment。因此,用户在无权限的表空间创建表后,尝试插入数据时会遇到权限错误。解决方案是设置alter system set deferred_segment_creation=false。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


oracle 11.2.0.1.0 32bit

1:创建用户aaa,给其connect和resource角色,但回收unlimited tablespace权限:

SQL> create user aaa identified by aaa default tablespace users;

User created.

SQL> grant connect,resource to aaa;

Grant succeeded.

SQL> revoke unlimited tablespace from aaa;

Revoke succeeded.

SQL> select * from role_sys_privs where role='RESOURCE';

ROLE                               PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE SEQUENCE                                NO
RESOURCE                       CREATE TRIGGER                                NO
RESOURCE                       CREATE CLUSTER                                NO
RESOURCE                       CREATE PROCEDURE                         NO
RESOURCE                       CREATE TYPE                                NO
RESOURCE                       CREATE OPERATOR                                NO
RESOURCE                       CREATE TABLE                                NO
RESOURCE                       CREATE INDEXTYPE                         NO

8 rows selected.

SQL> alter user aaa quota unlimited on users;

User altered.

2:现在的问题是:aaa在任何表空间都有创建表的权限
[oracle@master /]$ sqlplus aaa

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jun 6 18:38:25 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> create table test1(id int) tablespace users;

Table created.

SQL> create table test2 (id int) tablespace system;

Table created.

SQL> create table test3(id int) tablespace zaodian;

Table created.

3:表test1可以正常插入数据,test2和test3都无法插入数据,这是正常的:

SQL> insert into test1 values(1);

1 row created.

SQL> insert into test2 values(1);
insert into test2 values(1)
            *
ERROR at line 1:
ORA-01950: no privileges on tablespace 'SYSTEM'


SQL> insert into test3 values(1);
insert into test3 values(1)
            *
ERROR at line 1:
ORA-01950: no privileges on tablespace 'ZAODIAN'

 

导致这样的情况是:

ORACLE11G新特性:deferred_segment_creation 默认为true导致的,这个参数使创建表的时候,并不会使用任何的segment,当真正有数据插入的时候才会使用相关segment,所以会导致可以在任何表空间建立表的假象,但插入数据时会报错无权限

 

解决此问题: alter system set deferred_segment_creation=false 即可。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值