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

时间:2020-03-06 14:47:41  来源:igfitidea点击:

当我尝试执行包含来自不同架构的表的视图时,会抛出ORA-001031特权不足。这些表对创建视图的架构具有执行权限。如果执行视图的SQL语句,它将起作用。我想念什么?

解决方案

作为表所有者,我们需要向运行SELECT语句的用户授予对基础表的SELECT访问权限。

grant SELECT on TABLE_NAME to READ_USERNAME;

如果通过存储过程访问视图,则执行授权不足以访问该视图。我们必须明确授予选择权。

终于我得到了它的工作。史蒂夫的答案是正确的,但并非适用于所有情况。从第三个架构执行该视图时,它将失败。为此,我们必须添加Grant选项:

使用[GRANT]选项将[TABLE_NAME]授予[READ_USERNAME];

这样,[READ_USERNAME]也可以将视图的选择权限授予其他架构

问:什么时候需要"有授予选项"?

答:当我们具有从第三个架构执行的视图时。

例子:
模式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上的选择授予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排

让我回顾一下。

当我们构建包含不同所有者的对象的视图时,这些其他所有者必须向该视图的所有者授予"具有授予选项"。因此,视图所有者可以授予其他用户或者架构...。

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

假设user_b想要创建一个带有mine_a和yours_b联接的视图

为了使视图正常运行,user_a必须给"授予权限的情况下,将mine_a上的授予选择授予user_b"

然后,user_b可以将该视图上的选择授予所有人。