SYS查詢不到的同義詞
以前沒有注意到的一個現象,用SYS使用者在ALL_SYNONYMS檢視中查詢不到其他使用者同義詞的資訊,但是在DBA_SYNONYMS檢視中可以查詢到。
年前的一次遠端解決問題的過程中發現了這個現象,不過由於當時時間緊張,沒有來得及深入研究是什麼問題導致了這個現象。隨後趕上了春節放假,因此一直沒有跟蹤分析這個問題。
春節假期中倒是想過兩次,最開始懷疑是資料字典出現了不一致,因為對於SYS使用者而言,沒有什麼物件是沒有許可權的,顯然任何物件都應該可以在ALL_檢視中查詢到。
在第二次想起這個問題的時候突然想到了一個問題,很有可能這是正常的現象,於是做了一個簡單的測試在重現這個問題:
SQL> CONN TEST/TEST
Connected.
SQL> SELECT * FROM USER_SYNONYMS;
no rows selected
SQL> CREATE SYNONYM S_1 FOR T;
Synonym created.
SQL> CREATE SYNONYM S_2 FOR T@TESTDATA;
Synonym created.
SQL> SELECT * FROM USER_SYNONYMS;
SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
-------------------- -------------------- -------------------- ----------
S_2 T TESTDATA
S_1 TEST T
SQL> SELECT DB_LINK, USERNAME
2 FROM USER_DB_LINKS;
DB_LINK USERNAME
--------------- ------------------------------
HO.WORLD TRD_DSG
TEST231 TEST
TESTDATA TEST
TESTRAC U1
SQL> CONN / AS SYSDBA
Connected.
SQL> SELECT DB_LINK, USERNAME
2 FROM USER_DB_LINKS;
DB_LINK USERNAME
--------------- ------------------------------
KAIFA SYSTEM
SQL> SELECT *
2 FROM ALL_SYNONYMS
3 WHERE WNER = 'TEST';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- --------------- --------------- ---------- ---------------
TEST S_1 TEST T
SQL> SELECT *
2 FROM DBA_SYNONYMS
3 WHERE WNER = 'TEST';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- --------------- --------------- ---------- ---------------
TEST S_2 T TESTDATA
TEST S_1 TEST T
SQL> CREATE DATABASE LINK TESTDATA
2 CONNECT TO TEST
3 IDENTIFIED BY TEST
4 USING '172.25.88.94/testdata';
Database link created.
SQL> SELECT *
2 FROM DBA_SYNONYMS
3 WHERE WNER = 'TEST';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- --------------- --------------- ---------- ---------------
TEST S_2 T TESTDATA
TEST S_1 TEST T
SQL> SELECT *
2 FROM ALL_SYNONYMS
3 WHERE WNER = 'TEST';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- --------------- --------------- ---------- ---------------
TEST S_1 TEST T
SQL> SELECT COUNT(*) FROM TEST.S_2;
COUNT(*)
----------
1
上面的例子模擬了SYS使用者在ALL_SYNONYMS檢視中查詢不到TEST使用者的S_2同義詞,但是在DBA_SYNONYMS檢視中可以查詢到的情況。
造成這個現象的原因其實很簡單,DBA開頭的檢視表示的資料庫中存在的所有物件,顯然是可以查詢到S_2同義詞的,而ALL開頭的檢視表示的當前使用者下或者當前使用者有許可權訪問的物件,對於普通同義詞而言,由於SYS擁有SELECT ANY TABLE許可權,因此同義詞的基表對於SYS來說是有許可權訪問的,所以同義詞也理應在ALL_SYNONYMS檢視中出現,但是對於基於資料庫鏈的同義詞則不然,由於S_2同義詞依賴TEST使用者下的私有同義詞TESTDATA,而SYS使用者是沒有辦法訪問這個資料庫鏈的,因此S_2在ALL_SYNONYMS中不出現是正常的。
事實上即使在SYS使用者下建立同名的同義詞,指向同一個遠端資料庫的同一個使用者,S_2同義詞仍然在ALL_SYNONYMS中不會出現,對於同義詞S_2而言,SYS使用者和TEST使用者訪問的時候依賴的資料庫鏈並不相同,即使兩個資料庫鏈是等同的,對於同義詞訪問而言也是不同的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-627341/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10g ALL_SYNONYMS同義詞查詢效能下降
- 【Oracle】-【同義詞】-public與非public同義詞Oracle
- 物件、同義詞和公有同義詞順序選取物件
- Oracle中的同義詞SYNONYMOracle
- 授權與同義詞
- ORACLE公有/私有同義詞Oracle
- 詳解同義詞(synonym)
- 匯出Oracle中的同義詞Oracle
- Oracle9i sys登入後通過public同義詞move table報錯Oracle
- 中考常見同義詞和同義短語總結
- 匯出oracle公有同義詞Oracle
- Oracle同義詞建立方法Oracle
- 多層巢狀同義詞巢狀
- Oracle同義詞 kingsql作品OracleSQL
- 官檔同義詞學習
- 通過建立檢視及同義詞方式實現普通使用者查詢X$基表的方法
- 資料庫鏈與同義詞資料庫
- Oracle同義詞建立方法(轉)Oracle
- 6.5. 常用物件——6.5.4. 同義詞物件
- Oracle資料庫開發——同義詞Oracle資料庫
- impala查詢不到hive裡建立的表Hive
- 同義詞相似度可以怎樣計算
- 同義詞The schema object cannot be contained in a package.ObjectAIPackage
- 學習筆記 過程、同義詞、序列筆記
- 查詢同時附帶查主表的第二列
- ES 入門 - 基於詞項的查詢
- js查詢字串中字元最多的單詞JS字串字元
- 失效的詞法作用域查詢規則?
- 優化擁有謂詞or的子查詢優化
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- 【學習】SQL基礎-017-同義詞SQL
- Oracle之處理synonym同義詞無效物件Oracle物件
- Oracle——04同義詞與資料庫連結Oracle資料庫
- PostgreSQL 原始碼解讀(170)- 查詢#90(PG中的詞法定義:scanner.l)#3SQL原始碼
- PostgreSQL 原始碼解讀(171)- 查詢#91(PG中的詞法定義:scanner.l)#4SQL原始碼
- 二分查詢的定義
- SQL查詢的轉義方法(一)SQL
- CBO的查詢轉換(謂詞推入與子查詢展開(Subquery Unnesting))