ORA-01031:选择视图时特权不足
当我尝试执行包含来自不同架构的表的视图时,会抛出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可以将该视图上的选择授予所有人。