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

有帮助吗?

解决方案

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

grant SELECT on TABLE_NAME to READ_USERNAME;

其他提示

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

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

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

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行

让我回顾一下。

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

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

的表的所有者

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

连接的视图

为了使视图正常工作,user_a必须在授予选项“

”的情况下,将“在mine_a上选择授予user_b”

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

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

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

只需输入此

即可

全部公开;

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top