【问题标题】:Oracle user privilegeOracle 用户权限
【发布时间】:2020-03-29 22:16:24
【问题描述】:

我创建了两个新用户和一个新角色。授予模式 A 中一个表的角色的选择权限,并将该角色分配给用户 b。在使用此用户对架构 a 中的表发出选择查询时,我遇到了未找到表或视图的问题。

创建用户 READUSER1,由 readuser1 识别; 创建由 readuser2 识别的用户 READUSER2;

CREATE ROLE READONLY_USER IDENTIFIED BY readonlyuser;

GRANT select ON READUSER1.TESTA TO READONLY_USER;

将 READONLY_USER 授予 READUSER2;

现在来自 READUSER2 会话:

SELECT * FROM READUSER1.TESTA > 00942. 00000 - “表或视图不存在”

【问题讨论】:

    标签: oracle12c


    【解决方案1】:

    我假设您在 readUser1 架构中成功创建了表,尽管您没有显示该步骤。

    当以readUser2 登录时,会话启用了哪些角色?

    select *
      from session_roles
    

    我敢打赌,该会话未启用该角色。通常,您不会为角色设置密码,因为您通常希望用户一旦登录就可以使用这些角色。但是,如果您为角色设置密码,那么每次用户创建新会话时,他们必须通过指定密码来显式启用该角色。这在一些不寻常的情况下非常有用,但不是常态。

    假设readonly_user没有出现在session_roles中,可以使用set role命令启用角色

    set role readonly_user
      identified by readonlyuser;
    

    完成此操作后,该角色应出现在session_roles 中,并且您应该能够查询该表。

    不过,通常情况下,您会通过省略 identified by 子句来创建普通角色而不是密码保护角色

    create role readonly_user;
    

    【讨论】:

    • 太棒了!这是确切的根本原因和解决方案。非常感谢@Justin Cave!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2017-02-27
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多