角色resource在11g和12c中的區別
前言
在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @Autowired 和 @ Resource的區別
- @Resource和@Autowired的區別
- @Autowired和@Resource的區別
- 【Java面試】@Resource 和 @Autowired 的區別Java面試
- @Autowire和@Resource註解的區別
- @Autowired和@Resource有哪些區別
- Oracle dba角色和sysdba的區別Oracle
- 在java中“equals”和“==”的區別Java
- @Autowired 與@Resource的區別
- @Autowired與@Resource的區別
- 一條簡單的sql在11g和12c中的不同SQL
- 在 JavaScript 中,exec() 和 match() 區別JavaScript
- 在xpath中text()和string(.)的區別
- 在Oracle中session和process的區別(轉)OracleSession
- 介面和列舉在方法中的區別
- @Resource 與 @Service註解的區別
- 在Pandas中 SQL操作:SQLAlchemy和PyMySQL的區別MySql
- read name 和 read 在 Bash 中的區別
- 插入單引號在oracle和informix中的區別OracleORM
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- mysql中“ ‘ “和 “ ` “的區別MySql
- Js中for in 和for of的區別JS
- JavaScript中==和===的區別JavaScript
- PHP 中的 -> 和 :: 的區別PHP
- utf8 和 UTF-8 在使用中的區別
- BLOB和CLOB的區別以及在ORALCE中的插入和查詢操作
- 在Linux中,Jail和Chroot有何區別?LinuxAI
- button 和input 的區別及在表單form中的用法ORM
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- viewflow在html和body的區別ViewHTML
- Oracle 11g使用dblink與12c使用dblink的一點區別Oracle
- java 中equals和==的區別Java
- SQL中where和on的區別SQL
- Python 中 is 和 == 的區別Python
- Python中is和==的區別Python
- Java中equals和==的區別Java
- oracle中in和exists的區別Oracle