在 Oracle 中,我尝试创建这样的视图
create view ddd as
select *
from myschema1.t1
join myschema2.t2
....
当我运行这个语句时,我得到一个错误ORA-01031 : insufficient privileges
。但是,如果我只是在查询工作表中执行查询,它就可以工作。
为什么我的CREATE VIEW
语句失败,我需要什么权限才能使语句成功?
在 Oracle 中,我尝试创建这样的视图
create view ddd as
select *
from myschema1.t1
join myschema2.t2
....
当我运行这个语句时,我得到一个错误ORA-01031 : insufficient privileges
。但是,如果我只是在查询工作表中执行查询,它就可以工作。
为什么我的CREATE VIEW
语句失败,我需要什么权限才能使语句成功?
为了创建一个引用myschema1.t1
和的视图myschema2.t2
,拥有该视图的用户必须被授予直接访问这两个表的权限,而不是通过角色。我的第一个猜测是,您已通过角色获得了基础表的权限。您可以在 SQL*Plus 中通过禁用角色并重新运行查询来验证这一点。如果你这样做
SQL> set role none;
SQL> select *
from myschema1.t1
join myschema2.t2 ...
查询有效吗?如果没有,那么您只有通过角色而不是直接授予的权限。请注意,如果您希望能够授予其他用户访问您的视图的权限,则需要授予您对 objects 的权限WITH GRANT OPTION
。
GRANT SELECT ON myschema1.t1 TO <<user that will own the view>> WITH GRANT OPTION;
GRANT SELECT ON myschema2.t2 TO <<user that will own the view>> WITH GRANT OPTION;
如果问题不在于基础对象的权限,则问题很可能是您没有被授予CREATE VIEW
权限。
这听起来像你没有CREATE VIEW
特权。如果您无权访问这些表,则应该获得ORA-00942: table or view does not exist
.