角色resource在11g和12c中的區別

零度的雨1205發表於2019-09-13

前言

     在11gR2環境中,假如使用者同時被授予了connect和resource角色後,即可登入資料庫建立物件。但是在12c中,如果使用者只是被授予了這兩個角色,可以建立物件,但是無法插入資料。


實驗

     下面做一個小實驗:

11g環境:

(1)建立表空間

CREATE TABLESPACE test DATAFILE 

  '/u01/app/oracle/oradata/bond/test01.dbf' SIZE 5242880

  AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M

  LOGGING ONLINE PERMANENT BLOCKSIZE 8192

  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT 

 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;

(2)建立使用者並授權

create user test identified by "test" default tablespace test;

grant resource,connect to test;

(3)建立物件並插入資料

[oracle@bond ~]$ sqlplus test/test


SQL*Plus: Release 11.2.0.4.0 Production on Sun Aug 18 13:56:26 2019


Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options


SQL> create table t_dict as 

  2  select * from dict where rownum <=100;


Table created.


插入資料成功!


12c環境

(1)建立表空間

CREATE TABLESPACE test DATAFILE 

  '/u01/app/oracle/oradata/bond/test01.dbf' SIZE 5242880

  AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M

  LOGGING ONLINE PERMANENT BLOCKSIZE 8192

  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT 

 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;

(2)建立使用者並授權

create user test identified by "test" default tablespace test;

grant resource,connect to test;

(3) 建物件並插入資料

[oracle@bond ~]$ sqlplus test/test


SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 6 19:53:16 2019


Copyright (c) 1982, 2016, Oracle.  All rights reserved.



Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production


SQL> create table t_dict as 

  2  select * from dict where rownum <=100;

select * from dict where rownum <=100

              *

ERROR at line 2:

ORA-01950: no privileges on tablespace 'TEST'


插入資料失敗。


原因分析

     對比11g和12c的角色許可權及使用者許可權可知,當使用者被授予connect和resource許可權後,11g預設會授予使用者UNLIMITED TABLESPACE許可權,而12c並沒有預設授予該許可權。

     查詢官網得知,11g R2的這種現象貌似是一個bug,而12c修復了這個bug。官網解釋如下:

The  UNLIMITED TABLESPACE  system privilege will be removed from the  RESOURCE  role in a future Oracle Database release (reference Bug 7614645).


思考

      既然12c不能像11g那樣直接授予使用者connect和resource許可權即可使用,那麼該怎麼去建立使用者並分配許可權呢?

以下給個建立普通使用者的示例:


CREATE TABLESPACE test DATAFILE 

  '/u01/app/oracle/oradata/bond/test01.dbf' SIZE 5242880

  AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M

  LOGGING ONLINE PERMANENT BLOCKSIZE 8192

  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT 

 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;


CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 

  '/u01/app/oracle/oradata/bond/test_temp01.dbf' SIZE 33554432

  AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M

  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576;


create user test identified by "test"

default tablespace test

quota 30G on test

temporary tablespace test_temp;









來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902769/viewspace-2656979/,如需轉載,請註明出處,否則將追究法律責任。

相關文章