2017-02-17 52 views
0

在正常架構帳戶(不是sys)下的sqlplus中,查詢select * from v$instance;運行正常。但是,當創建視圖,其引用它,錯誤發生:

create or replace view vw_test_instance 
as 
select * from V$instance; 

SQL錯誤:ORA-01031:權限不夠

如果開關v$instance任何正常的表像select * from dual;,那麼沒有問題創建的視圖。

Oracle版本:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
PL/SQL Release 11.2.0.4.0 - Production 
"CORE 11.2.0.4.0 Production" 
TNS for Linux: Version 11.2.0.4.0 - Production 
NLSRTL Version 11.2.0.4.0 - Production 

回地面被我升級萬兆到11g數據庫的運行,用過的東西,以萬兆剛剛打破11g上工作...我可以修復它而不觸及源代碼的意見?不勝感激!

回答

0

這與用戶GRANTS有關。

1. GRANT SELECT ON V$INSTANCE TO <USER>; --> Will be provided by SYSDBA 

2. Then try. It will definitley help. 

此鏈接還將幫助您瞭解爲何會出現這種行爲。

v$views Grant

+0

謝謝!最終從下面的鏈接調整O7_DICTIONARY_ACCESSIBILITY。 – neolei

0

"query select * from v$instance; runs OK. But when create view which references it, error happens:"

你得到的錯誤 - SQL Error: ORA-01031: insufficient privileges - 表示你的用戶沒有權限創建視圖。

" things used to work on 10g just broken on 11g"

顯然,在10g特權下,您的用戶有權創建視圖,而在11g上他們沒有。

最可能的解釋是您的用戶依賴於CONNECT角色。在舊版本的Oracle中,該角色具有多個系統權限,包括CREATE VIEW。這種隱含的特權授予總是狡猾。然而,在11g中這一點發生了變化,現在角色只有CREATE SESSION。所有其他特權必須明確授予。這在the 11g Upgrade docs中提及,並且由11g安全指南Find out more深入解釋。

+0

我的帳戶已被授予對v $ instance的選擇權限,v $ instance的底層視圖是sys.v $ _instance,並且我可以在沒有問題的情況下在我的模式帳戶下運行query:'select * from sys.v_ $ instance;' 。 – neolei

+0

@neolei - 重新讀你的問題我相信我的修改後的答案是一個更好的猜測:) – APC