中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中User和Schema的區別和聯系

發布時間:2020-08-11 15:19:28 來源:ITPUB博客 閱讀:738 作者:迷倪小魏 欄目:關系型數據庫

今天在閱讀Oracle官方文檔的時候,讀到schema的基本概念,這就讓我產生了一個疑問:user和schema兩者之間到底有什么區別?為了更深層次的理解二者之間的區別和聯系,以下是官方文檔中關于user和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 database’s 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.)”


“A user is a name defined in the database that can connect to and access objects. Schemas and users help database administrators manage database security.”


  官方文檔里面說得比較明白:

schema是數據對象的集合,包括像表、視圖、索引、同義詞等等都可以說是schema的對象。但不夠生動,網上有篇文章里面把schema和user的關系用一個形象的比喻闡述得非常透徹,引用如下: 
  “user即Oracle中的用戶,和所有系統的中用戶概念類似,用戶所持有的是系統的權限及資源;而schema所涵蓋的是各種對象,它包含了表、函數、包等等對象的“所在地”,并不包括對他們的權限控制。

Oracle中的schema就是指一個用戶下所有對象的集合,schema本身不能理解成一個對象,oracle并沒有提供創建schema的語法,schema也并不是在創建user時就創建,而是在該用戶下創建第一個對象之后schema也隨之產生,只要user下存在對象,schema就一定存在,user下如果不存在對象,schema也不存在;如果創建一個新用戶,該用戶下如果沒有對象則schema不存在,如果創建一個對象則和用戶同名的schema也隨之產生。實際上在使用上,shcema與user完全一樣,沒有什么區別,在出現schema名的地方也可以出現user名。

在數據庫中 一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在創建對象時不指定該對象的schema,在該對象的schema為用戶的缺省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并建立普通用戶wjqseiang 
  [oracle@seiang11g ~]$ sqlplus / as sysdba 
  SYS@seiang11g> create user wjq identified by wjq; 
  User created. 

  SYS@seiang11g> create user seiang identified by seiang; 
  User created. 

第二步,賦予一些基本的權限給新建的用戶wjqseiang 
  SYS@seiang11g> grant connect,create table,resource to wjq,seiang; 
  Grant succeeded. 

第三步,以wjq用戶登陸,創建一張表并插入數據: 
  SYS@seiang11g> conn wjq/wjq 
  Connected. 

  WJQ@seiang11g> create table t (id int); 
  Table created. 

  WJQ@seiang11g> insert into t values(1); 
  1 row created. 

  WJQ@seiang11g> commit; 
  Commit complete. 

第四步,以seiang用戶登陸,看能否查詢wjq用戶所建表里面的數據: 
  SYS@seiang11g>conn seiang/seiang 
  Connected. 

  SEIANG@seiang11g> select table_name from user_tables; 
  no rows selected 

  SEIANG@seiang11g> show user; 
  USER is "SEIANG" 

  SEIANG@seiang11g> select * from wjq.t; 
  select * from wjq.t 
  * 
  ERROR at line 1: 
  ORA-00942: table or view does not exist 
  從以上結果可以看出,用戶 seiang無法查看用戶wjq所建表里面的內容,甚至被告知沒有這張表。 

第五步,修改當前schemawjq,并繼續查詢: 
  SEIANG@seiang11g> alter session set current_schema=wjq; 
  Session altered. 

  SEIANG@seiang11g> show user; 
  USER is "SEIANG" 

  SEIANG@seiang11g> select * from wjq.t; 
  select * from wjq.t 
  * 
  ERROR at line 1: 
  ORA-00942: table or view does not exist 
  仍然不能查看。 

第六步,以wjq用戶登陸,賦予seiang用戶查看t表的權限: 
  SYS@seiang11g> conn wjq/wjq 
  Connected. 

  WJQ@seiang11g> grant select on t to seiang; 
  Grant succeeded. 

第七步,以seiang用戶登陸,查看wjq用戶的t表: 
  SYS@seiang11g> conn seiang/seiang 
  Connected. 

  SEIANG@seiang11g>select * from wjq.t; 
  ID 
  ---------- 
  1 

  更簡單的,將當前schema更改為seiang,可以簡化查詢過程: 
  SEIANG@seiang11g> alter session set current_schema=wjq; 
  Session altered. 

  SEIANG@seiang11g> select * from t; 
  ID 
  ---------- 
  1 
  這個實驗下來,對user和schema的區別和聯系應該有了進一步的理解了。



作者:SEian.G(苦練七十二變,笑對八十一難)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台中县| 古田县| 兴仁县| 涞源县| 仙游县| 开鲁县| 略阳县| 苍溪县| 沈阳市| 元谋县| 鄂伦春自治旗| 房产| 张家港市| 四子王旗| 富宁县| 广宗县| 栖霞市| 延川县| 铁岭市| 义乌市| 庆云县| 西和县| 班戈县| 基隆市| 商南县| 青铜峡市| 桃园县| 平利县| 德昌县| 吴川市| 忻城县| 长汀县| 宁蒗| 渑池县| 稷山县| 南华县| 黄石市| 太原市| 临泉县| 日照市| 略阳县|