在Oracle中,我尝试创建这样的视图
create view ddd as
select *
from myschema1.t1
join myschema2.t2
....
当我运行此语句时,出现错误ORA-01031 : insufficient privileges
。但是,如果我只是在Query Worksheet中执行查询,它就可以工作。
为什么我的CREATE VIEW
语句失败,我需要什么权限才能使语句成功?
答案 0 :(得分:2)
为了创建引用myschema1.t1
和myschema2.t2
的视图,拥有该视图的用户必须直接访问这两个表,而不是通过角色。我的第一个猜测是,您已通过角色授予基础表的权限。您可以通过禁用角色并重新运行查询来验证SQL * Plus中的内容。如果你这样做
SQL> set role none;
SQL> select *
from myschema1.t1
join myschema2.t2 ...
查询是否有效?如果没有,那么您只能通过角色直接授予权限。请注意,如果您希望能够授予其他用户访问您的视图的权限,则需要授予对象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
特权。
答案 1 :(得分:1)
听起来你没有CREATE VIEW
特权。如果您无权访问表格,则应获得ORA-00942: table or view does not exist
。