Oracle
ORA-00942: 創建同義詞時表或視圖不存在
我們使用的是 oracle 11g,db 結構是這樣的:
我們有使用者
CST
和FAS
.
CST
包含一個表,作為使用者為該表創建了ST_CAT2
一個公共同義詞。是一個賦予.權限的角色。被授予。ST_CAT``CST.ST_CAT2``SYS
ST_ROLE``SELECT UPDATE DELETE ALTER``ST_CAT2``ST_ROLE``FAS
現在,在創建視圖時
FAS
,CREATE OR REPLACE VIEW "FAS"."EXTERNAL_SR" ("PROD_ID", "PRODUCT") AS SELECT prod_id, product FROM st_cat;
我們遇到了錯誤
ORA-00942: table or view does not exist
可能是什麼原因?
在SQL 語言參考中,您將在Prerequesites(我強調)下找到:
包含視圖的模式的所有者必須具有從視圖所基於的所有表或視圖中選擇(READ 或 SELECT 特權)、插入、更新或刪除行所需的特權。所有者必須直接被授予這些權限,而不是通過角色。
因此,您必須將權限直接授予創建視圖的使用者。
對於 PL/SQL 過程也是如此,並且已經在這篇文章中進行了討論。
有兩種方法可以直接授予選擇權限:
- 通過對象權限授予它:
grant select on A_TABLE to A_USER;
- 通過系統特權授予它:
grant select any table to A_USER;
不推薦使用後者,授予非 DBA 使用者這樣的 ANY 系統權限被視為安全風險。
很多過程和操作都存在這樣的 ANY 權限,例如 INSERT ANY TABLE、EXECUTE ANY PROCEDURE、…