发布于 2016-04-21 11:19:07
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上的授予之后,对同义词所引用的表所授予的特权已经更改。
发布于 2016-04-21 13:48:56
“在Oracle Doc中,公共同义词属于名为public的特殊用户组,数据库中的每个用户都可以访问它。私有同义词包含在特定用户的架构中,只对用户和基础对象的受赠方可用。”
有了模式B表X上的公共同义词酒吧,用户A可以访问用户B的表X。使用B模式表Y上的私有同义词PVTS,用户A不能访问用户B的表Y,除非如前所述明确授予访问权限。
发布于 2021-07-21 13:08:37
我的2美分:-假设在tab1模式中定义了一个表abc_owner,并且它的同义词是在abc_user模式中创建的,那么:-
在abc_user模式中运行这样的授权:-
GRANT SELECT ON tab1 TO def_owner;可能成功或失败,这取决于abc_user对abc_owner中的对象的授权。如果只有选择授权,上述查询将失败。然后,您必须在所有者模式本身中执行此操作。
https://stackoverflow.com/questions/36767902
复制相似问题