在同义词和基础表上访问权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在同义词和基础表上访问权限相关的知识,希望对你有一定的参考价值。

1 /同义词和底层对象的权限如何相关?如果一个人拥有同义词的权利,他会自动拥有该表的权利,反之亦然吗?

Oracle

当您在同义词上授予对象权限时,您实际上是在对基础对象授予权限,并且同义词仅作为GRANT语句中对象的别名

这意味着同义词的特权就足够了。这将绕过表权限。

Another source说桌子上的访问权限就足够了,同义词权限没有任何意义。

这是表示同义词或基础表上的权限是否足够?

2 /私有和公共同义词的行为是否相同。我还没有真正看到为用户授予“查看/访问”同义词权限的示例。如何向用户授予私有同义词的权限?

答案

Oracle文档和您提到的消息都说完全相同。权限未授予同义词。当您尝试在同义词上授予权限时,数据库实际上会对同义词引用的对象执行授予。因此,如果同义词是公共的或私有的,则没有区别,因为实际授权是在同义词引用的对象上进行的。

祝你好运。

编辑

让我们来说明发生了什么:

-- Logged in as user BOB2

CREATE TABLE RPJ_TEST (N NUMBER);

SELECT *
  FROM DBA_TAB_PRIVS
  WHERE TABLE_NAME = 'RPJ_TEST';

-- the above statement returns no rows

CREATE SYNONYM RPJ_TEST_SYN  -- create synonym
  FOR RPJ_TEST;

SELECT *
  FROM DBA_TAB_PRIVS
  WHERE TABLE_NAME = 'RPJ_TEST';

-- the above statement returns no rows

GRANT SELECT ON RPJ_TEST TO BOB;  -- grant on table

SELECT *
  FROM DBA_TAB_PRIVS
  WHERE TABLE_NAME = 'RPJ_TEST';

-- the above statement returns
GRANTEE     OWNER   TABLE_NAME  GRANTOR PRIVILEGE   GRANTABLE  HIERARCHY
BOB         BOB2    RPJ_TEST    BOB2    SELECT      NO         NO

GRANT UPDATE ON RPJ_TEST_SYN TO BOB2;  -- grant "on synonym" actually performs grant on table

SELECT *
  FROM DBA_TAB_PRIVS
  WHERE TABLE_NAME = 'RPJ_TEST';

GRANTEE     OWNER  TABLE_NAME   GRANTOR  PRIVILEGE GRANTABLE  HIERARCHY
BOB         BOB2   RPJ_TEST     BOB2     SELECT    NO         NO
BOB         BOB2   RPJ_TEST     BOB2     UPDATE    NO         NO

请注意,在同义词RPJ_TEST_SYN上授予后,同义词引用的表上授予的权限已更改。

另一答案

来自Oracle Doc“公共同义词由名为PUBLIC的特殊用户组拥有,并且可供数据库中的每个用户访问。私有同义词包含在特定用户的模式中,仅供用户和底层的受助者使用宾语。”

利用模式B的表X上的公共同义词PUBS,用户A可以访问用户B的表X.使用模式B的表Y上的私有同义词PVTS,除非如上所述明确授予访问,否则用户A不能访问用户B的表Y.

检查OracleDoc

以上是关于在同义词和基础表上访问权限的主要内容,如果未能解决你的问题,请参考以下文章

Oracle给权限和同义词

oracle学习篇七:同义词

Oracle基础 12 对象 objects 同义词/序列/试图/索引

同义词Synonym

oracle分配权限:一个用户访问另一个用户的表

oracle同义词