標籤:資料 test 好的 alt 解決 use show 關閉 back
一. 問題:
如何?在Oracle資料庫中訪問其他使用者的表時不需加表所屬的使用者名稱
二. 舉例:
Oracle裡面的使用者A,要訪問使用者B的表需要帶使用者B的首碼,如訪問使用者B的 TEST表,需要這樣訪問 select * from B.TEST;現在就是問如何才能無需添加使用者名稱的首碼。
三. 原因:
- 方便訪問常用表
- 隱藏表的使用者
四. 解決方案:1. 建立同義字(最好的方式)
文法:
CREATE [PUBLIC] SYNONYM synonym_name FOR [schema.] object[@db_link];
根據舉例進行延伸示範:
(1)登入sysdba為使用者B授予建立同義字的操作許可權: sqlplus /nolog conn /as sysdba; grant create synonym to B; (2)登入B使用者為A授予訪問特定表TEST的許可權: //注意:這是A使用者能夠使用同義字訪問B的TEST表的前提 grant select on TEST to A; //撤銷的方式: revoke select on TEST from A; (3)建立同義字 create synonym SY_TEST for B.TEST; (4)登入使用者A進行測試.
2.建立視圖(這個方法也不錯)
create view VW_TEST select * from B.TEST;
3.修改current_schema參數
用於切換當前會話的架構(schema)。在進行對象名解析時,如果對象名前沒有限定架構名,oracle 會自動在此架構下查詢匹配的對象。
例如,當 scott 使用者執行select * from emps;語句時,oracle 預設會查詢 scott 架構下的 emps 表;但是,如果alter session set current_schema=xx;更改了會話的當前架構,執行此語句時 oracle 會查詢 xx 架構下的 emps 表。
登入使用者A時,臨時修改current_schema參數: SQL> alter session set current_schema=B; Session altered. SQL> show user; USER is "A" SQL> select SYS_CONTEXT(‘USERENV‘,‘CURRENT_SCHEMA‘) CURRENT_SCHEMA from dual; CURRENT_SCHEMA -------------------------------------------------------------------------------- B SQL> SQL> spool off;
這種方式只是適用於當前一次會話,一旦會話關閉,下次就不行了.所以此種方式一次可行,但是通用不行.
Oracle資料庫訪問其他使用者下的表,不加表所屬的使用者名稱的實現方法