专栏首页bisal的个人杂货铺resource角色对quota表空间限额的影响

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限额,也不受其控制。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 几种去重的SQL写法

    墨天轮社区的每日一题(https://www.modb.pro/test),可以说是个小而精的专栏,利用碎片时间,就可以学习知识,非常推荐。

    bisal
  • dbms_xplan.display_awr方式获取执行计划的实验和之前的误导

    《查看Oracle执行计划的几种常用方法-系列1》(http://blog.csdn.net/bisal/article/details/38919181)这篇...

    bisal
  • 【每日一摩斯】-Troubleshooting: High CPU Utilization (164768.1) - 系列6

    如果问题是一个正运行的缓慢的查询SQL,那么就应该对该查询进行调优,避免它耗费过高的CPU资源。如果它做了许多的hash连接和全表扫描,那么就应该添加索引以提高...

    bisal
  • SQL解析在美团点评中的应用

    美团技术团队
  • oracle 11g 查看服务端/客户端编码,及修改db编码

    oracle 如果server与client端的编码不一致,asp.net读取db记录显示时,就可能出现乱码 查看oracle服务端编码:select * fr...

    菩提树下的杨过
  • 数据库的总结

    用户1112962
  • 史上最全-oracle12c pdb迁移实践

    Oracle在12c版本引入了多租户的概念,在一个cdb的根容器下可以创建多个pdb供不同用户使用,cdb中主要保存数据库元数据,而pdb中保存用户数据,各个p...

    数据库架构之美
  • SAP最佳业务实践:MM–组件收费的委外加工(251)-1业务概览

    用途 此业务情景中,创建了采购订单给委外加工商。任何提供给委外加工商的组件需要收费。 提供的组件金额过帐到AR,抵销AP金额 。 优点 原材料的价格与委...

    SAP最佳业务实践
  • 思考,撸一段 SQL ? 还是写一段代码?

    以下都为个人思考总结所得,只作为抛砖引玉之说,一定会有不同意见,如果你有不同看法,欢迎拍砖。

    芋道源码
  • 机器学习面试的12个基础问题,强烈推荐!

    这些问题是我在面试 AI 工程师岗位时常问到的问题。事实上,并非所有面试都需要用到所有这些问题,因为这取决于面试者的经验以及之前做过的项目。经过很多面试(尤其是...

    Sam Gor

扫码关注云+社区

领取腾讯云代金券