2011-01-31 100 views
3

我想创建一个视图,并将问题提炼到无法创建引用来自不同架构的表的视图。Oracle:跨模式创建视图?

例如,我可以这样做:

select count(*) from otherschema.othertable; 

,我可以这样做:

create view foo as select count(*) as bar from oneofmytables; 

但如果我尝试:

create view foo as select count(*) as bar from otherschema.othertable; 

我得到一个 “权限不足” 的错误。我需要什么额外的权限?

回答

8

你有直接授予其他用户的表吗?还是通过角色?您需要直接授予权限才能创建引用另一个表的对象(视图,过程等)。作为一个快速测试,在SQL * Plus

SQL> set role none; 
SQL> select count(*) from otherschema.othertable; 

如果失败了,那么问题是,你在桌子上通过角色被授予的权限。

+0

这两个很好,正确的答案,但我选择了这一个,因为它很容易让我来验证问题。谢谢! – chris 2011-02-01 13:41:01

5

我想你已经通过role而不是通过直接grantotherschema.othertable上给出选择权。

如果是这种情况,您应该连接为otheruser,然后做一个grant select on othertable to <your-schema>

+0

如果预期从第三个模式中选择视图,请将WITH GRANT OPTION添加到GRANT。 – 2011-01-31 21:51:39

1

我相信,你的DBA将需要向您授予

创建任何视图

特权。根据您网站的安全限制,他们可能会或不会允许这样做。我通常不会