resource角色对quota表空间限额的影响

前两天,看到论坛中有位兄弟说设置了用户对表空间的quota限额,但仍可以插入超过限额大小的数据量到表空间。

也是觉得很奇怪,那quota起什么作用?

用实验来说明:

1. 创建用户

SQL> create user res_user identified by user_123
         default tablespace dcsopen_tbspace
         quota 500K on dcsopen_tbspace;

grant create session, create table to res_user;

限定res_user用户在dcsopen_tbspace表空间中只能使用500K的容量。

2. 使用res_user账户登录

SQL> select * from user_ts_quotas;

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
------------------------------ ---------- ---------- ---------- ---------- ---
DCSOPEN_TBSPACE                         0     516096          0         63 NO

查看该用户可用最大容量为516096字节,大约500K。

3. 测试表空间可用容量

SQL> create table t as select * from all_objects where 1<>1;

创建一张表结构,用于测试。

SQL> insert into t select * from all_objects;
insert into t select * from all_objects
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'DCSOPEN_TBSPACE'

向其中插入数据,报错ORA-01536: space quota exceeded for tablespace 'DCSOPEN_TBSPACE',提示用户当前使用容量已超过对表空间的限额值因此拒绝执行插入。

4. 为用户授予resource权限

SQL> grant resource to res_user;

SQL> insert into t select * from all_objects;

未提示错误。

SQL> select * from user_ts_quotas;

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
------------------------------ ---------- ---------- ---------- ---------- ---
DCSOPEN_TBSPACE                   5242880     516096        640         63 NO

发现容量早已超过MAX_BYTES值。

查询此时用户拥有的角色:

SQL> select * from user_role_privs;

USERNAME                       GRANTED_ROLE                   ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
RES_USER                       RESOURCE                             NO  YES NO

查询此时用户的系统权限:

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                   ADM

------------------------------ ---------------------------------------- ---

RES_USER                       CREATE SESSION                           NO

RES_USER                       UNLIMITED TABLESPACE               NO

RES_USER                       CREATE TABLE                               NO

用户具有了UNLIMITED TABLESPACE的权限,即对表空间没有限额。

为了验证这点,可以revoke resource from res_user,再查询user_sys_privs,发现确实UNLIMITED
TABLESPACE权限是跟随RESOURCE角色的。

5. 可以不授予resource,但仍让用户具有无限容量权限

SQL> alter user
res_user quota unlimited on dcsopen_tbspace;

SQL> select * from
user_ts_quotas;

TABLESPACE_NAME
                    BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
------------------------------ ---------- ---------- ---------- ---------- ---
DCSOPEN_TBSPACE                   5242880         -1        640         -1 NO

-1表示无上限。

结论

1. 可以为用户指定使用某个表空间的限额,当使用容量超过限额,会提示错误。限额值可以用user_ts_quotas表查询。

2. 若为用户授予resource角色,则用户自动具有UNLIMITED TABLESPACE权限,即使用quota限额,也不受其控制。

时间: 2024-09-23 18:00:24

resource角色对quota表空间限额的影响的相关文章

用户表空间限额(Oracle User Space Quota )

原文转自:http://www.askmaclean.com/archives/know-more-about-oracle-user-space-quota.html Tablespace Quota 表空间限额是Oracle数据库中限制User使用空间的重要手段,我们来深入浅出地了解一下Space Quota在内部的实现: SQL> select * from v$version; BANNER ------------------------------------------------

用户表空间配额(User tablespace Quota)

用户表空间配额(User tablespace Quota) 真题1. 什么是用户的表空间配额(User tablespace Quota)? 答案:用户的表空间配额也叫表空间限额,指的是用户可以使用指定表空间的最大大小.控制用户的表空间配额也就等于控制用户所占用的表空间大小.在默认情况下,需要对用户赋予RESOURCE角色,虽然该角色没有UNLIMITED TABLESPACE权限,但是对用户赋予了该角色后,系统将会默认给用户赋予UNLIMITED TABLESPACE的系统权限,因此,新建的

oracle用户概念、oracle用户表空间和oracle用户资源文件

Oracle 用户管理 一.用户的概念 用户,即user,通俗的讲就是访问oracle数据库的"人".在oracle中,可以对用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema).权限.角色.存储设置.空间限额.存取资源限制.数据库审计等.每个用户都有一个口令,使用正确的用户/口令才能登录到数据库进行数据存取. 二.用户默认表空间 表空间是信息存储的最大逻辑单位.当用户连接到数据库进行资料存储时,若未指出数据的目标存储表空间时,则数据存储在用户的默认表空间

ORACLE表空间管理维护

1:表空间概念   在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示,一个数据库由对应一个或多个表空间,表空间逻辑上有一个或多个段(Segment)组成,物理上由一个或多个os file组成.       1.1基本的表空间   系统中默认创建的几个表空间:     SYSTEM     SYSAUX     USERS     UNDOTBS1     EXAM

Oracle 表空间详解

目录 目录 表空间概述 表空间的分类 默认表空间 查看默认的永久表空间 查看默认的TEMP表空间 查看默认的表空间类型 逻辑结构到物理结构的映射 对表空间的操作 查看表空间使用情况 查看数据库拥有的表空间 查看表空间中的数据文件 查看用户拥有的表空间 创建表空间 修改表空间 修改用户的默认和临时表空间 修改表空间的状态 修改表空间的数据文件 删除表空间 用户表空间限额 表空间概述 Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle

Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)

一.创建用户及表空间 1.连接数据库 [root@localhost ~]# su - oracle [oracle@localhost ~]$ sqlplus /nolog   #进入sqlplus环境 [oracle@localhost ~]$ conn / as sysdba 2.创建表空间 #指定表空间存放位置,磁盘限额 SQL> create tablespace test datafile '/main/oracle/oradata/test.dbf' size 1024M auto

Oracle 表空间时点恢复(TSPITR)

表空间时点恢复,是Oracle在基于冷备,热备恢复以外的一种以表空间为粒度的,不完全恢复的形式来将表空间恢复到过去某个特定的时间点的一种恢复方式.它整合了RMAN以及DataPump这2个备份恢复工具来实现时点恢复.那它具体的过程和逻辑是怎样的?下文是其具体的描述. 一.什么是表空间时点恢复 Oracle表空间时点恢复有2个需要理解的概念. 恢复粒度   表空间级别,也就是说恢复的粒度是以表空间为单位 时点恢复   时点恢复意味着是一个不完全恢复.也就是说可以把某个或几个表空间恢复到过去的特定时

oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息

查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs;        结果可以是:        USERNAME                       PRIVILEGE                    

Oracle新建用户、角色,授权,建表空间的sql语句_oracle

oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system privilege )可以让用户执行特定的命令集.例如,create table权限允许用户创建表,grant any privilege 权限允许用户授予任何系统权限.对象权限( database object privilege )可以让用户能够对各个对象进行某些操作.例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表.视图.序列(sequences)或快照