【问题标题】:Fail to run explain plan in Oracle SQL Developer在 Oracle SQL Developer 中运行解释计划失败
【发布时间】:2020-03-04 16:00:03
【问题描述】:

SQL 是:

EXPLAIN PLAN FOR SELECT * FROM table1

应授予特权:

GRANT ALL ON sys.plan_table TO dbAccount

导致如下错误

SQL 错误:ORA-01039: 01039. 00000 - “视图底层对象的权限不足” *原因:试图在没有其他人的情况下解释计划 视图底层对象的必要权限。 *操作:获取必要的权限或不执行违规操作。

【问题讨论】:

  • 是否与授予所有视图读取或选择权限有关?

标签: database oracle oracle-sqldeveloper sql-execution-plan


【解决方案1】:

ORA-01039:视图底层对象的权限不足”消息实际上意味着您没有权限访问用于构建视图的BASE OBJECTS,而不是您没有权限访问使用 VIEW 本身。

例如,如果你有这个视图:

Create view tejash.V1 as select * from tejash.Table1

/

Grant all on tejash.V1 to ITpeople;
/

如果您以 ITpeople 身份登录,则您有权访问 tejash.V1,但不能直接访问 tejash.Table1。

通常 IT 人员可以从视图中选择数据,即运行这样的 SQL

Select * from tejash.V1

您不需要权限即可访问底层对象(即 tejash.Table1)。但是在 Oracle 中,如果您尝试解释计划相同的 SQL,您将需要访问底层对象的权限。如果您没有该权限,则会发现此错误。

演示:

-- 从用户 TEJASH 创建视图并将视图的选择权限授予用户 T

SQL> CREATE VIEW V1 AS
  2      SELECT
  3          *
  4      FROM
  5          EMP;

View created.

SQL> GRANT SELECT ON V1 TO T;

Grant succeeded.

-- 试图在视图上选择并解释视图上的计划(失败)来自用户 T

SQL> SELECT * FROM TEJASH.V1;

        ID NAME           SALARY DEPT
---------- ---------- ---------- ----------
         1 shubham          1000 comp
         2 vijay            5000 civil

SQL> EXPLAIN PLAN FOR SELECT * FROM TEJASH.V1;
EXPLAIN PLAN FOR SELECT * FROM TEJASH.V1
                                      *
ERROR at line 1:
ORA-01039: insufficient privileges on underlying objects of the view

-- 将表的选择授权也从用户 TEJASH 授予 T

SQL> GRANT SELECT ON EMP TO T;

Grant succeeded.

-- 用户 T 的解释计划现在成功了。

SQL> EXPLAIN PLAN FOR SELECT * FROM TEJASH.V1;

Explained.

干杯!!

【讨论】:

  • 所以必须创建视图并授予对所有表的解释计划的访问权限?
  • 您必须拥有视图所有基础表的选择权限才能获取计划
  • 是否与授予所有视图读取或选择权限有关?
  • 授权是SELECT。
猜你喜欢
  • 2015-10-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多