1

在 Oracle 中,我尝试创建这样的视图

create view ddd as
  select * 
    from myschema1.t1 
         join myschema2.t2 
....

当我运行这个语句时,我得到一个错误ORA-01031 : insufficient privileges。但是,如果我只是在查询工作表中执行查询,它就可以工作。

为什么我的CREATE VIEW语句失败,我需要什么权限才能使语句成功?

4

2 回答 2

2

为了创建一个引用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权限。

于 2012-08-02T15:32:36.037 回答
1

这听起来像你没有CREATE VIEW特权。如果您无权访问这些表,则应该获得ORA-00942: table or view does not exist.

于 2012-08-02T15:25:21.790 回答