“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.
干杯!!