阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

125次阅读
没有评论

共计 2388 个字符,预计需要花费 6 分钟才能阅读完成。

前两天,看到论坛中有位兄弟说设置了用户对表空间的 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 限额,也不受其控制。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-06/132439.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2388字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中