resource角色對quota資料表空間限額的影響

來源:互聯網
上載者:User

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.