user和schema的區別
這兩個概念確實不太好理解
說穿了其實user是控制許可權的,而schema是個容器,非所有者要訪問這個容器下的物件就需要在
物件前面寫上schema(owner)的名字,如果不想寫而又沒有建立synonym,此時可以透過
alter session set current_schema=schema_name
來改變當前session的schema從而在訪問物件時省去schema(owner);
最終能否訪問物件還是要看是否有訪問這個物件的許可權而和schema無關。
user和schema的區別:
說穿了其實user是控制許可權的,而schema是個容器,非所有者要訪問這個容器下的物件就需要在
物件前面寫上schema(owner)的名字,如果不想寫而又沒有建立synonym,此時可以透過
alter session set current_schema=schema_name
來改變當前session的schema從而在訪問物件時省去schema(owner);
最終能否訪問物件還是要看是否有訪問這個物件的許可權而和schema無關。
--下面的話是puber OoNiceDream 發上來的一段非常經典形象的比喻。
user即oracle中的使用者,和所有系統的中使用者概念類似,使用者所持有的是系統的許可權及資源;
而schema所涵蓋的是各種物件,它包含了表、函式、包等等物件的“所在地”,並不包括對他們的許可權控制。
好比一個房子,裡面放滿了傢俱,對這些傢俱有支配權的是房子的主人(user),而不是房子(schema)。
你可以也是一個房子的主人(user),擁有自己的房子(schema)。可以透過alter session的方式進入別人的房子。
這個時候,你可以看到別人房子裡的傢俱(desc)。
如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。
至於你是否有許可權使用(select)、搬動(update)或者拿走(delete)這些傢俱就看這個房子的主人有沒有給你這樣的許可權了,
或者你是真個大廈(DB)的老大(DBA)。alter session set schema可以用來代替synonyms。
如果你想呼叫其他schema的物件(有許可權的前提下),又沒建synonym,有不想把其他schema名字放如程式碼中,
就可以先alter session set schema=。
SQL> connect /as sysdba
已連線。
SQL> revoke dba from xys,test;
revoke dba from xys,test
*
第 1 行出現錯誤:
ORA-01951: ROLE 'DBA' 未授予 'XYS'
SQL> revoke dba from test;
撤銷成功。
SQL> connect xys/manager
已連線。
SQL> select table_name from user_tables;
未選定行
SQL> create table t(id int) ;
表已建立。
SQL> insert into t values(1);
已建立 1 行。
SQL> commit;
提交完成。
SQL> connect test/test
已連線。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
T
TT
SYS_TEMP_FBT
SQL> desc t
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SQL> select * from t;
未選定行
SQL> show user
USER 為 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
SQL> alter session set current_schema=xys;
會話已更改。
SQL> show user
USER 為 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
SQL> select * from t;
select * from t
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
SQL> alter session set current_schema=TEST;
會話已更改。
SQL> select * from t;
未選定行
SQL> connect xys/manager
已連線。
SQL> grant select on t to test;
授權成功。
SQL> connect test/test
已連線。
SQL> select * from xys.t;
ID
----------
1
SQL> alter session set current_schema=xys;
會話已更改。
SQL> select * from t;
ID
----------
1
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1000155/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle User 和 Schema 的區別Oracle
- Oracle中User和Schema的區別和聯絡Oracle
- ORACLE中的兩個概念:user和schema的區別和聯絡Oracle
- 水煮oracle33---關於oracle中segment、schema和user區別Oracle
- user rollbacks和transaction rollbacks的區別
- Oracle中drop user和drop user cascade的區別Oracle
- user_tab_columns和user_tab_cols的區別!
- computed watcher和user watcher的區別
- 資料庫中Schema和Database有什麼區別資料庫Database
- Can one rename a database user (schema)?Database
- 深入講解資料庫中User和Schema的關係資料庫
- user rollbacks 與 transaction rollbacks 的區別
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- XML Schema和XML DTD的資料型別比較XML資料型別
- PARSING_USER_ID,PARSING_SCHEMA_ID,PARSING_SCHEMA_NAME in V$SQLSQL
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC