1、狀況說明html
建立用戶時只有connect角色及CREATE TABLE(爲用戶建立表的權限),INSERT ANY TABLE(向任意表中插入行的權限)兩個系統權限時,當在此用戶下建立表時會有報錯:ORA-01950: 對錶空間 'USERS' 無權限sql
2、針對此報錯解決方法數據庫
以sys用戶登錄數據庫,執行如下語句(對指定表空間不作限額):bash
alter user 數據庫用戶名quota unlimited on USERS;ide
3、事例分析狀況步驟:spa
一、查看事例用戶jktest已有角色與權限htm
受權: grant connect,CREATE TABLE,INSERT ANY TABLE to jktest;
1.1 jktest有鏈接角色:
it
SYS@orcl>select * from dba_role_privs where grantee='JKTEST'; GRANTEE GRANTED_ROLE ADM DEF ------------------------------ ------------------------------ --- --- JKTEST CONNECT NO YES
1.2 jktest擁有系統的權限以下:
table
SYS@orcl>select * from dba_sys_privs where grantee='JKTEST'; GRANTEE PRIVILEGE ADM ------------------------------ ---------------------------------------- --- JKTEST CREATE TABLE NO JKTEST INSERT ANY TABLE NO
二、Oracle 用戶對錶空間配額quota操做說明(兩種方式說明以下)class
2.1 建立用戶時指定限額(指定用戶在某表空間限制)
sqlplus / as sysdba SQL> create user jktest identified by jktest default tablespace users temporary tablespace temp quota 10M on users; User created. 查詢用戶配額的信息: SQL> select tablespace_name,username,max_bytes from DBA_TS_QUOTAS where username='JKTEST'; TABLESPACE_NAME USERNAME MAX_BYTES ------------------- ---------- ---------- USERS JKTEST 10485760
2.2 更改用戶的表空間限額:
……不對用戶作表空間限額控制: SQL> grant unlimited tablespace to jktest; Grant succeeded. 這種方式是全局性的. 即修改用戶對全部表空間的配額。 ……若是咱們想改某個具體的,即針對用戶的某個特定的表空間不作限額(對指定表空間不作限額),可使用以下SQL: SQL> alter user jktest quota unlimited on USERS; User altered. ……查看配額: SQL> select tablespace_name,username,max_bytes from DBA_TS_QUOTAS where username='JKTEST'; TABLESPACE_NAME USERNAME MAX_BYTES ------------------------------ ---------- ---------- USERS JKTEST -1 這時候max_bytes 爲-1,即不受限制。
三、回收用戶對錶空間的配額(一樣兩種方式):
3.1 全局: SQL> revoke unlimited tablespace from jktest; Revoke succeeded. ……在查看配額,已經沒有了相關信息: SQL> select tablespace_name,username,max_bytes from DBA_TS_QUOTAS where username='JKTEST'; no rows selected 3.2 針對某個特定的表空間: SQL> alter user jktest quota 0 on users; User altered. --若是用戶已經被授予了unlimited tablespace權限的話,那麼alter user jktest quota 0 on users;限制是不起做用的