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

Oracle



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

Another source 表示对表的访问权限就足够了,同义词权限没有意义。

这是否意味着对同义词或基础表的特权就足够了?

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

最佳答案

Oracle 文档和您提到的消息都说的是完全相同的事情。不对同义词授予特权。当您尝试授予对同义词的权限时,数据库实际上会对该同义词所引用的对象执行授权。因此,同义词是公共(public)的还是私有(private)的没有区别,因为实际授权是在同义词所引用的对象上进行的。

祝你好运。

编辑

让我们演示一下会发生什么:

-- 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 - 同义词和基础表的访问权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36767902/

10-12 19:43