繁体   English   中英

授予在另一个架构上创建同义词(Oracle)

[英]grant to create synonyms on another schema (Oracle)

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

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

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

B.b_synonym maps to A.b_object

您需要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;

您不能授予仅适用于另一模式的特权。 您必须授予ANY(即使是暂时的),例如在主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进行测试,而改为使用一个角色,并为具有该角色的任何用户切换模式。 可以为同一角色授予访问A对象的必要权限,而您需要以某种方式授予该权限-同义词本身不会赋予任何访问权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM