代码之家  ›  专栏  ›  技术社区  ›  Igor Zelaya

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

  •  29
  • Igor Zelaya  · 技术社区  · 17 年前

    7 回复  |  直到 17 年前
        1
  •  37
  •   Fourat    7 年前

    我终于让它开始工作了。史蒂夫的答案是正确的,但并非所有情况下都如此。当从第三个模式执行该视图时,它将失败。要实现这一目标,您必须添加赠款选项:

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

    这样,, [READ_USERNAME]

        2
  •  19
  •   Steve K    17 年前

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

    grant SELECT on TABLE_NAME to READ_USERNAME;
    
        3
  •  6
  •   oracledba oracledba    17 年前

    问:何时需要“授予期权”?

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

    例子: 模式DSW有一个名为view\u 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
    

    将select on dsdw.view\u name授予dsdw\u select\u角色; 将dsdw_选择_角色授予fdr;

    从dsdw.view\u name中选择count(*); 第1行错误:

    发放补助金:

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

    现在,罗斯福: 5排

        4
  •  4
  •   Roberto Monterrey    16 年前

    让我重述一下。

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

    例子: 用户_b是名为yours_b的表的所有者

    假设用户_b想要创建一个包含我的_a和你的_b的视图

    为了使视图正常工作,用户a必须给出“使用grant选项将矿山a上的选择授予用户b”

    然后用户_b可以将该视图上的选择权授予所有人。

        5
  •  1
  •   dacracot    17 年前

        6
  •  1
  •   akshay    13 年前

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

    向公众授予一切权利;

        7
  •  1
  •   Van Gogh    12 年前

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

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

        8
  •  0
  •   Alisherbek    5 年前

    您还可以使用架构名称创建视图 例如