【问题标题】:Failed to create view contains v$view未能创建包含 v$view 的视图
【发布时间】:2017-02-17 16:15:52
【问题描述】:

在普通模式帐户(不是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 上就坏了……我可以在不接触视图源代码的情况下修复它吗?赞赏!

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案1】:

    这与用户 GRANTS 有关。

    1. GRANT SELECT ON V$INSTANCE TO <USER>; --> Will be provided by SYSDBA 
    
    2. Then try. It will definitley help.
    

    此链接还将帮助您了解为什么会发生这种行为。

    v$views Grant

    【讨论】:

    • 谢谢!最后从下面的链接调整 O7_DICTIONARY_ACCESSIBILITY。
    【解决方案2】:

    “查询select * from v$instance;运行正常。但是当创建引用它的视图时,会发生错误:”

    您收到的错误 - SQL Error: ORA-01031: insufficient privileges - 表明您的用户缺乏创建视图的权限。

    " 以前在 10g 上工作的东西在 11g 上坏了"

    很明显,在 10g 权限上,您的用户拥有创建视图的权限,而在 11g 上却没有。

    最可能的解释是您的用户依赖 CONNECT 角色。在旧版本的 Oracle 中,这个角色有几个系统权限,包括 CREATE VIEW。这种隐含的特权授予总是狡猾的。但是,在 11g 中,这种情况发生了变化,角色现在只有 CREATE SESSION。必须明确授予所有其他权限。这在the 11g Upgrade docs 中有所提及,并在 11g 安全指南Find out more 中进行了深入解释。

    【讨论】:

    • 我的账户已被授予对 v$instance 的选择权限,v$instance 的底层视图是 sys.v$_instance,我可以在我的架构账户下运行查询:select * from sys.v_$instance; 没有问题。
    • @neolei - 重新阅读了你的问题,我相信我修改后的答案是一个更好的猜测:)
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多