ORA-01031:选择视图时权限不足

时间:2008-09-26 16:47:52

标签: oracle view

当我尝试执行包含来自不同模式的表的视图时,会抛出ORA-001031不足的权限。这些表具有创建视图的架构的执行权限。如果我执行视图的SQL语句就可以了。我错过了什么?

8 个答案:

答案 0 :(得分:35)

最后我开始工作了。史蒂夫的回答是正确的,但不适用于所有情况。从第三个模式执行该视图时失败。为此,您必须添加授权选项:

GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;

这样,[READ_USERNAME]也可以将视图的select权限授予另一个模式

答案 1 :(得分:19)

作为表所有者,您需要将基础表上的SELECT访问权限授予正在运行SELECT语句的用户。

grant SELECT on TABLE_NAME to READ_USERNAME;

答案 2 :(得分:4)

Q值。什么时候需要“有补助金选项”?

一个。当你从第三个模式执行视图时。

实施例:     schema DSDSW有一个名为view_name的视图

a) that view selects from a table in another schema  (FDR.balance)
b) a third shema  X_WORK  tries to select  from that view

典型补助金:     将dsdw.view_name上的select赋予dsdw_select_role;     将dsdw_select_role授予fdr;

但是:fdr得到了     从dsdw.view_name中选择count(*);      第1行的错误:      ORA-01031:权限不足

发放补助金:

grant select on fdr.balance to dsdw with grant option;

现在fdr:     从dsdw.view_name中选择count(*);          5行

答案 3 :(得分:4)

让我回顾一下。

当您构建包含不同所有者的对象的视图时,其他所有者必须向视图所有者授予“with grant option”。因此,视图所有者可以授予其他用户或模式....

实施例: User_a是名为mine_a的表的所有者 User_b是名为yours_b

的表的所有者

假设user_b想要创建一个具有mine_a和yours_b

连接的视图

为了使视图正常工作,user_a必须给出“使用grant选项将mine_a上的grant select给user_b”

然后user_b可以将该视图的选择授予每个人。

答案 4 :(得分:1)

如果通过存储过程访问视图,则执行授权不足以访问视图。您必须明确授予select。

答案 5 :(得分:1)

如果通过存储过程访问视图,则执行授权不足以访问视图。您必须明确授予select。

只需输入此

即可

全部公开;

答案 6 :(得分:0)

要使用视图,用户必须具有相应的权限,但仅限于视图本身,而不是其基础对象。但是,如果删除了视图的基础对象的访问权限,则用户将不再具有访问权限。出现此问题的原因是用户查询视图时使用的安全域是视图的定义者。如果从视图的定义器中撤消对基础对象的特权,则视图将变为无效,并且没有人可以使用该视图。因此,即使已授予用户访问视图的权限,如果已从视图的基础对象中撤消了定义者的权限,用户也可能无法使用该视图。

Oracle文档 http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017

答案 7 :(得分:0)

您还可以使用架构名称创建视图 例如,创建或替换视图schema_name.view_name作为选择。.