熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE中的兩個概念:user和schema的區別和聯系

2013-11-13 16:21:16  來源: Oracle 

  今天重讀ORACLE官方文檔《concepts》讀到schema的基本概念對它的理解更進一層官方文檔中關於schema是這樣解釋的

  A schema is a collection of database objects A schema is owned by a database user and has the same name as that user Schema objects are the logical structures that directly refer to the databases data Schema objects include structures like tables views and indexes(There is no relationship between a tablespace and a schema Objects in the same schema can be in different tablespaces and a tablespace can hold objects from different schemas)

  官方文檔裡面說得比較明白schema是數據對象的集合包括像表視圖索引同義詞等等都可以說是schema的對象但不夠生動網上有篇文章裡面把schema和user的關系用一個形象的比喻闡述得非常透徹引用如下

  user即Oracle中的用戶和所有系統的中用戶概念類似用戶所持有的是系統的權限及資源而schema所涵蓋的是各種對象它包含了表函數包等等對象的所在地並不包括對他們的權限控制好比一個房子裡面放滿了家具對這些家具有支配權的是房子的主人(user)而不是房子(schema)你可以也是一個房子的主人(user)擁有自己的房子(schema)可以通過alter session的方式進入別人的房子如果你沒有特別指定的話你所做的操作都是針對你當前所在房子中的東西至於你是否有權限使用(select)搬動(update)或者拿走(delete)這些家具就看這個房子的主人有沒有給你這樣的權限了或者你是整個大廈(DB)的老大(DBA)alter session set schema可以用來代替synonyms如果你想調用其他schema的對象(有權限的前提下)但並沒有建synonym同時又不想把其他 schema名字放入代碼中就可以首先使用alter session set schema=<其他schema名字>

  這段文字說得非常生動把user和schema的區別闡述得很透徹下面通過具體的例子來加深對user和schema兩者區別的認識

  第一步以sys用戶登陸SQL並建立普通用戶storm和penguin

  $ sqlplus / as sysdba

  SQL> create user storm identified by storm;

  User created

  SQL> create user penguin identified by penguin;

  User created

  第二步賦予一些基本的權限給新建的用戶storm和penguin

  SQL> grant connectcreate tableresource to stormpenguin;

  Grant succeeded

  第三步以storm用戶登陸創建一張表並插入數據

  SQL> conn storm/storm

  Connected

  SQL> create table t (id int);

  Table created

  SQL> insert into t values();

   row created

  SQL> commit;

  Commit complete

  第四步以penguin用戶登陸看能否查詢storm用戶所建表裡面的數據

  SQL> conn penguin/penguin

  Connected

  SQL> select table_name from user_tables;

  no rows selected

  SQL> show user;

  USER is PENGUIN

  SQL> select * from stormt;

  select * from stormt

  *

  ERROR at line :

  ORA: table or view does not exist

  從以上結果可以看出用戶 penguin無法查看用戶storm所建表裡面的內容甚至被告知沒有這張表

  第五步修改當前schema為storm並繼續查詢

  SQL> alter session set current_schema=storm;

  Session altered

  SQL> show user;

  USER is PENGUIN

  SQL> select * from stormt;

  select * from stormt

  *

  ERROR at line :

  ORA: table or view does not exist

  仍然不能查看

  第六步以storm用戶登陸賦予penguin用戶查看t表的權限

  SQL> conn storm/storm

  Connected

  SQL> grant select on t to penguin;

  Grant succeeded

  第七步以penguin用戶登陸查看storm用戶的t表

  SQL> conn penguin/penguin

  Connected

  SQL> select * from stormt;

  ID

  

  

  更簡單的將當前schema更改為storm可以簡化查詢過程

  SQL> alter session set current_schema=storm;

  Session altered

  SQL> select * from t;

  ID

  

  

  這個實驗下來對user和schema的區別和聯系應該有了進一步的理解了


From:http://tw.wingwit.com/Article/program/Oracle/201311/18195.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.