在存儲數據時出現ORA-01950:對表空間 'USERS' 無權限 錯誤,解決如下:
找到對象Users下的用戶名,然后點編輯,角色權限添加dba
在oracle創建了一個新的表空間和一個新的用戶,當用這個新用戶創建表時, 卻出現:ORA-01950: 表空 間'USERS'中無權限 。 我已經把創建表的權限賦給了此用戶,怎么還會缺少權限呢? 解決辦法 方法1:賦予該用戶RESOURCE角色 SQL> connect / as sysdba 已連接。 SQL> grant resource to zhaoh; 授權成功。 SQL> connect zhaoh/a 已連接。 SQL> create table test (ID number,name varchar2(40)); 表已創建。 方法2:增加該用戶表空 間'USERS'中的配額 SQL> select * from user_sys_privs; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- ZHAOH CREATE TABLE NO SQL> connect / as sysdba; 已連接。 SQL> ALTER USER "ZHAOH" QUOTA UNLIMITED ON "USERS"; 用戶已更改。 SQL> connect zhaoh/a 已連接。 SQL> create table test (ID number,name varchar2(40)); 表已創建。 創建新的用戶時,要指定default tablespace,否則它會把system表空間當成自己的缺省表空間。這樣做是不提倡的。估計原來創建某個用戶的時候沒有指定缺省表空間,而現在它使用系統表空間的權限被DBA給收回了。 先用的簡單的辦法試試,一般缺省的ORACLE安裝都是有USERS表空間的。 比如你要在用戶(或SCHEMA)usera中建表,那么你用SYSTEM登錄ORACLE后,執行如下SQL ALTER USER usera QUOTA UNLIMITED ON USERS; 如果沒有USERS表空間,則會報錯,你可以找一個其他的表空間,從v$tablespace可以看到所有的表空間。 下面情況sany用戶開始創建的時候沒有制定default tablespace ******** SQL> connect sany/as646333 已連接。 SQL> select * from user_sys_privs 2 ; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- SANY CREATE SESSION NO SANY EXECUTE ANY PROCEDURE NO SANY CREATE USER NO SANY CREATE TABLE NO SQL> create table bjwh(user_id number(5),user_name varchar2(20),phone varchar2(12),email varchar2(20 )); create table bjwh(user_id number(5),user_name varchar2(20),phone varchar2(12),email varchar2(20)) * 第 1 行出現錯誤: ORA-01950: 對表空間 'USERS' 無權限 SQL> connect system/oracle 已連接。 SQL> alter user sany quota unlimited on users; 用戶已更改。 SQL> connect sany/as646333 已連接。 SQL> create table bjwh(user_id number(5),user_name varchar2(20),phone varchar2(12),email varchar2(2 0)); 表已創建。 SQL> disconnect 從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options 斷開 SQL> desc bjwh SP2-0640: 未連接 SP2-0641: "DESCRIBE" 需要連接至服務器 SQL> connect sany/as646333 已連接。 SQL> desc bjwh 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- USER_ID NUMBER(5) USER_NAME VARCHAR2(20) PHONE VARCHAR2(12) EMAIL VARCHAR2(20) 問題解決。 以前執行了grant dba to 用戶 查了一下dba角色中有一項 : DBA UNLIMITED TABLESPACE YES 現在執行了revoke dba from 用戶 報錯:ora-01950:對表空間XXX無權限 辦法: alter user username quota umlimited on tablespacename; 或者 grant resource to username 也可以 因為 grant resource to username 時 自動獲得了有unlimited tablespace的系統權限 從online documents 找到這段話: When you grant the DBA and RESOURCE roles to a user or role with Oracle7 release 7.2.2 or later, the user or role is also granted the UNLIMITED TABLESPACE system privilege. When you revoke either role from a user or role, the UNLIMITED TABLESPACE system privilege is also revoked. The UNLIMITED TABLESPACE can also be revoked independent of the DBA and RESOURCE roles.