为什么我可以创建一个同义词,但没有将 grant select 授予同一个 table?

Why I can create a synonym but no give grant select to the same table?

我正在尝试授予对从 schema1 到 schema2 (oracle10g) 的 table 的访问权限。

我在 schema2 上创建了一个同义词:

CREATE SYNONYM schema2.table FOR schema1.table;

同义词创建成功

然后我尝试在同一个 table 上授予 select:

grant select on schema1.table to schema2;

我得到了:

ORA-00942: table or view does not exist 

这对我来说没有意义。我能够创建同义词但不能创建授权。我做错了什么?

我无法从 schema2 中获取 table:

select * from table;
ORA-00942: table or view does not exist

如果我有“CREATE ANY SYNONYM| 权限,我可以在模式 1 和模式 2 中创建 table 的同义词,而不需要对底层对象授予权限。如果我没有权限schema1 table (GRANT WITH GRANT OPTION) 将它重新授予另一个用户,那么我也不能从这个用户那里授予。

解决方案,以 schema1 身份登录并在那里进行授权,然后同义词将在 schema2 下工作,或者确保我登录的用户有权授予 schema1 对象。

根据您的评论:

以 schema1 身份登录并授予您希望 schema2 在您的 table 上执行的任何操作。

例)

SQL> 将 TABLE 上的 SELECT、插入、更新、删除授予 SCHEMA2;

SCHEMA2 将能够通过其同义词看到 table,并允许对其进行那些操作。

如果 SCHEMA2 打算在视图中使用此 table,然后它将授予 select 访问其他模式的权限,那么您需要将 "WITH GRANT OPTION" 添加到来自 schema1 或 schema2 的初始授权将无法重新授予其他用户权限。

您可以为实际不存在的对象创建同义词,例如

create synonym flub for blib;

...所以您能够创建同义词并不意味着对象存在。