Oracle查看权限

Oracle查看权限,oracle,Oracle,在Oracle中,我尝试创建如下视图 create view ddd as select * from myschema1.t1 join myschema2.t2 .... 当我运行此语句时,我得到一个错误ORA-01031:权限不足。但是,如果我只是在查询工作表中执行查询,它就会工作 为什么我的CREATE VIEW语句失败了?我需要什么特权才能使语句成功?听起来你好像没有CREATE VIEW特权。如果您没有访问表的权限,您应该获得ORA-00942:

在Oracle中,我尝试创建如下视图

create view ddd as
  select * 
    from myschema1.t1 
         join myschema2.t2 
....
当我运行此语句时,我得到一个错误
ORA-01031:权限不足
。但是,如果我只是在查询工作表中执行查询,它就会工作


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

听起来你好像没有
CREATE VIEW
特权。如果您没有访问表的权限,您应该获得
ORA-00942:表或视图不存在

为了创建引用
myschema1.t1
myschema2.t2
的视图,必须向拥有该视图的用户授予直接访问这两个表的权限,而不是通过角色。我的第一个猜测是,您已经通过角色被授予了对基础表的特权。您可以在SQL*Plus中通过禁用角色并重新运行查询来验证这一点。如果你这样做

SQL> set role none;
SQL> select * 
       from myschema1.t1 
            join myschema2.t2 ...
查询有效吗?如果不是,则您只有通过角色授予的权限,而不是直接授予的权限。请注意,如果您希望能够授予其他用户访问您的视图的权限,则需要通过授予选项授予您对对象的权限

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;
GRANT在myschema1.t1上选择并使用GRANT选项;
在myschema2.t2上使用授予选项授予选择;

如果问题不在于底层对象的权限,那么问题很可能是您没有被授予
创建视图
权限。

有趣的是,我必须验证这一点,因为您关于ORA-00942错误的观点非常有意义,如果您有
创建视图
权限,您可以通过角色访问表,但不能直接访问表,创建查询表的视图将返回ORA-01031错误,而不是ORA-00942错误。我尝试授予权限,但说ORA-01917:用户或角色“myuser”不存在。我确信没有输入错误。@user595234-如果没有输入错误,那么用户
myuser
就不存在。如果看不到您键入的内容,我可能会怀疑您指定了错误的Oracle用户名。