当我尝试执行包含来自不同模式的表的视图时,会抛出ORA-001031不足的权限。这些表具有创建视图的架构的执行权限。如果我执行视图的SQL语句就可以了。我错过了什么?
答案 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作为选择。.