如何在Oracle11g中为物化视图授予权限

时间:2012-08-31 09:24:32

标签: oracle oracle11g materialized-views

我对oracle很新,并试图授予我创建的一些物化视图的权利。

我做了什么(全部来自sqlplus命令行):

  

sqlplus“/ as sysdba

>create tablespace tablespace_test datafile 'g:\tables\tablespace_test.dbf' size 20M autoextend on;

>create materialized view test_mv_1 tablespace tablespace_test parallel build immediate refresh complete on demand as select cm.* from yyy.jjj$project@externaldb p, yyy.jjj$mgmt@externaldb cm where (p.project_nbr = cm.project_nbr);

>create user dummy profile default identified by password default tablespace tablespace_test account unlock;

>grant connect to dummy;

>grant select on test_mv_1 to dummy;

>select * from test_mv_1;   <---***this works, data is there

>connect dummy

>select * from test_mv_1;
ERROR at line 1:
ORA-00942: table or view does not exist

不知道如何解决这个问题,我确信我做错了什么。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

如果物化视图归SYS所有(这是一个真的坏主意 - 你永远不应该在SYS架构中创建对象。{{1它是特殊的。它是为Oracle保留的。它的行为经常与数据库中的每个其他模式不同。)并且没有为物化视图创建同义词,在发出查询时需要指定完全限定的名称SYS。那是

dummy

你真的,真的真的想要在不同的架构中创建物化视图。假设您在SQL> connect dummy/password SQL> select * from sys.test_mv_1; 模式中创建实体化视图,查询将更改为

mv_owner

如果要避免使用完全限定名称,可以创建同义词。如果您创建公共同义词

select *
  from mv_owner.test_mv_1

或者如果您在CREATE PUBLIC SYNONYM test_mv_1 FOR mv_owner.test_mv_1 架构

中创建私有同义词
dummy

然后CREATE SYNONYM test_mv_1 FOR mv_owner.test_mv_1 将能够指定非限定对象名称

dummy