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;限制是不起做用的