首页 文章

授予在另一个模式上创建同义词(Oracle)

提问于
浏览
0

我只是想知道是否有任何选项授予在不同架构上创建同义词的权限,而不给出“ANY”选项 . 我只想缩小授权范围,以便为安全目的提供必要的许可 .

我们创建了一个与应用程序产品相关的模式名称A.但是应用程序假设通过另一个(登录)模式B访问对象 . 我们已经将资源授予模式A,因此模式A所有者可以创建自己的对象 . 我需要使用什么授权语法来授予模式A以在模式B上创建同义词,因此它可以创建同义词 .

最终结果应如下所示,并且可以由架构所有者A创建而不受DBA的干扰

B.b_synonym maps to A.b_object

2 回答

  • 0

    因此,您需要CREATED ANY SYNONYM权限才能将其作为A.

    GRANT CREATE ANY SYNONYM TO A;
    

    编辑:要避免任何特权,请执行以下操作:

    a)作为A:

    GRANT SELECT ON mytable1 TO B;
    GRANT SELECT, INSERT, UPDATE, DELETE ON mytable2 TO B;
    

    b)作为B:

    CREATE SYNONYM a_mytable1 FOR A.mytable1;
    CREATE SYNONYM a_mytable2 FOR A.mytable2;
    
  • 4

    您无法授予仅适用于其他架构的权限 . 你必须给予任何 - 即使是暂时的,例如在创建/修改主A模式期间,为了减少安全影响,并在拥有权限时在其他B用户的模式中创建所有同义词 . 否则用户B必须自己创建同义词;或用户A可以创建公共同义词 .

    作为拥有任何同义词的替代方法,您可以让用户B切换到架构A:

    alter session set current_schema = A;
    

    然后,他们可以引用A的对象,而不必使用模式名称作为前缀,尽管他们在自己的模式中看不到任何对象而没有为这些对象添加前缀 - 听起来不像B会有对象但很难说 .

    您还可以通过登录触发器自动执行该架构切换:

    create or replace trigger ramread_logon_trigger
    after logon on database
    begin
      if user = 'B' then
        execute immediate 'alter session set current_schema = A';
      end if;
    end;
    /
    

    如果您实际拥有多个用户,则可以使用角色,并通过使用 dbms_session.is_role_enabled 进行测试,为具有该角色的任何用户切换架构 . 可以授予相同的角色访问权限所需的权限_'s objects, which you will need to grant somehow - a synonym doesn' t本身可以授予任何访问权限 .

相关问题