在正常模式帐户(不是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
背景是我将数据库运行10g升级到11g,10g上运行的东西刚刚打破11g ...我可以在不触及视图源代码的情况下修复它吗?理解!
答案 0 :(得分:0)
这与用户GRANTS有关。
1. GRANT SELECT ON V$INSTANCE TO <USER>; --> Will be provided by SYSDBA
2. Then try. It will definitley help.
此链接还可以帮助您了解发生此类行为的原因。
答案 1 :(得分:0)
&#34;查询
select * from v$instance;
运行正常。但是当创建引用它的视图时,会发生错误:&#34;
您收到的错误 - SQL Error: ORA-01031: insufficient privileges
- 表示您的用户缺乏创建视图的权限。
&#34;曾经在10g上工作的东西刚刚打破了11g&#34;
显然,对于10g特权,您的用户有权创建视图,而在11g他们没有。
最可能的解释是您的用户依赖于CONNECT角色。在旧版本的Oracle中,此角色具有多个系统特权,包括CREATE VIEW。这种隐含的特权授予总是狡猾的。然而,在11g中这改变了,现在角色只有CREATE SESSION。必须明确授予所有其他权限。这在the 11g Upgrade docs中有所提及,并由11g安全指南Find out more深入解释。