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

use*_*858 0 oracle oracle11g

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

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

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

B.b_synonym maps to A.b_object
Run Code Online (Sandbox Code Playgroud)

Eri*_*ler 5

您需要CREATED ANY SYNONYM特权才能以A身份执行此操作,因此

GRANT CREATE ANY SYNONYM TO A;
Run Code Online (Sandbox Code Playgroud)

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

a)作为A:

GRANT SELECT ON mytable1 TO B;
GRANT SELECT, INSERT, UPDATE, DELETE ON mytable2 TO B;
Run Code Online (Sandbox Code Playgroud)

b)作为B:

CREATE SYNONYM a_mytable1 FOR A.mytable1;
CREATE SYNONYM a_mytable2 FOR A.mytable2;
Run Code Online (Sandbox Code Playgroud)