首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对同义词和基础表的访问权限

对同义词和基础表的访问权限
EN

Stack Overflow用户
提问于 2016-04-21 11:14:30
回答 3查看 45.9K关注 0票数 5

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

甲骨文

当您在同义词上授予对象特权时,您实际上是在基础对象上授予特权,而同义词只是作为grant语句中的对象的别名。

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

另一个来源说,访问表上的权限就足够了,同义词特权没有任何意义。

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

私人和公共同义词的行为是相同的。我还没有真正看到一个为用户授予同义词特权以“查看/访问”的例子。如何将私有同义词的特权授予用户?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-21 11:19:07

Oracle文档和您提到的消息都说了同样的话。同义词不授予特权。当尝试对同义词授予特权时,数据库实际上会对同义词所引用的对象执行授予。因此,如果同义词是公共的还是私有的,这并没有什么区别,因为实际的授权是在同义词所引用的对象上进行的。

祝你好运。

编辑

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

代码语言:javascript
复制
-- 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上的授予之后,对同义词所引用的表所授予的特权已经更改。

票数 11
EN

Stack Overflow用户

发布于 2016-04-21 13:48:56

“在Oracle Doc中,公共同义词属于名为public的特殊用户组,数据库中的每个用户都可以访问它。私有同义词包含在特定用户的架构中,只对用户和基础对象的受赠方可用。”

有了模式B表X上的公共同义词酒吧,用户A可以访问用户B的表X。使用B模式表Y上的私有同义词PVTS,用户A不能访问用户B的表Y,除非如前所述明确授予访问权限。

检查OracleDoc

票数 3
EN

Stack Overflow用户

发布于 2021-07-21 13:08:37

我的2美分:-假设在tab1模式中定义了一个表abc_owner,并且它的同义词是在abc_user模式中创建的,那么:-

在abc_user模式中运行这样的授权:-

代码语言:javascript
复制
GRANT SELECT  ON tab1  TO def_owner;

可能成功或失败,这取决于abc_user对abc_owner中的对象的授权。如果只有选择授权,上述查询将失败。然后,您必须在所有者模式本身中执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36767902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档