Oracle中有兩個概念容易混淆──user和schema,本隨筆記錄並摘抄了一些促進理解這連個概念的理解方法,但願有助於分清這兩個概念。session
user是控制權限的,而schema則是一個容器,非全部者若是須要訪問這個容器下的對象,就須要在對象前面寫上schema(owner)的名字,若是不想寫而又沒有建立synonym,此時能夠經過alter session set current_schema=schema_name來改變當前session的schema從而在訪問對象時省去schema(owner);最終能 否訪問對象仍是要看是否有訪問這個對象的權限而和schema無關。函數
深刻理解user和schema的區別:
User即Oracle中的用戶,和全部系統的中用戶概念相似,用戶所持有的是系統的權限及資源。
Schema所涵蓋的是各類對象,它包含了表、函數、包等等對象的"所在地",並不包括對他們的權限控制。對象
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=<其餘schema名字>改變當前默認的Schema。
資源