user和schema的區(qū)別:
說(shuō)穿了其實(shí)user是控制權(quán)限的,而schema是個(gè)容器,非所有者要訪問(wèn)這個(gè)容器下的對(duì)象就需要在
對(duì)象前面寫(xiě)上schema(owner)的名字,如果不想寫(xiě)而又沒(méi)有創(chuàng)建synonym,此時(shí)可以通過(guò)
alter session set current_schema=schema_name
來(lái)改變當(dāng)前session的schema從而在訪問(wèn)對(duì)象時(shí)省去schema(owner);
最終能否訪問(wèn)對(duì)象還是要看是否有訪問(wèn)這個(gè)對(duì)象的權(quán)限而和schema無(wú)關(guān)。
--下面的話是puber OoNiceDream 發(fā)上來(lái)的一段非常經(jīng)典形象的比喻。
user即oracle中的用戶,和所有系統(tǒng)的中用戶概念類(lèi)似,用戶所持有的是系統(tǒng)的權(quán)限及資源;
而schema所涵蓋的是各種對(duì)象,它包含了表、函數(shù)、包等等對(duì)象的“所在地”,并不包括對(duì)他們的權(quán)限控制。
好比一個(gè)房子,里面放滿了家具,對(duì)這些家具有支配權(quán)的是房子的主人(user),而不是房子(schema)。
你可以也是一個(gè)房子的主人(user),擁有自己的房子(schema)。可以通過(guò)alter session的方式進(jìn)入別人的房子。
這個(gè)時(shí)候,你可以看到別人房子里的家具(desc)。
如果你沒(méi)有特別指定的話,你所做的操作都是針對(duì)你當(dāng)前所在房子中的東西。
至于你是否有權(quán)限使用(select)、搬動(dòng)(update)或者拿走(delete)這些家具就看這個(gè)房子的主人有沒(méi)有給你這樣的權(quán)限了,
或者你是真?zhèn)€大廈(DB)的老大(DBA)。alter session set schema可以用來(lái)代替synonyms。
如果你想調(diào)用其他schema的對(duì)象(有權(quán)限的前提下),又沒(méi)建synonym,有不想把其他schema名字放如代碼中,
就可以先alter session set schema=<其他schema名字>。