1 /同义词和底层对象的权限如何相关?如果一个人拥有同义词的权利,他会自动拥有该表的权利,反之亦然吗?
当您在同义词上授予对象权限时,您实际上是在授予权限 底层对象的特权,同义词仅作为 GRANT语句中对象的别名
这意味着对同义词的特权就足够了。这将绕过表权限。
Another source表示对表的访问权限已足够,同义词权限没有意义。
这是表示同义词或基础表上的权限是否足够?
2 /私有和公共同义词的行为是否相同。我还没有真正看到为用户授予同义词权限的示例,以便查看/访问"。如何向用户授予私有同义词的权限?
答案 0 :(得分:8)
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上授予后,同义词引用的表上授予的权限已更改。
答案 1 :(得分:2)
来自Oracle Doc“公共同义词由名为PUBLIC的特殊用户组拥有,并且可供数据库中的每个用户访问。私有同义词包含在特定用户的模式中,仅供用户和受助者使用对于基础对象。“
使用模式B的表X上的公共同义词PUBS,用户A可以访问用户B的表X.使用模式B的表Y上的私有同义词PVTS,除非明确授予访问权限,否则用户A不能访问用户B的表Y如上所述。
答案 2 :(得分:0)
我的两分钱:- 假设在 abc_owner 模式中定义了一个表 tab1 并且在 abc_user 模式中创建了它的同义词,那么:-
在 abc_user 架构中运行这样的授权:-
GRANT SELECT ON tab1 TO def_owner;
可能成功或失败取决于 abc_user 对 abc_owner 中的对象的授权。 如果它只有选择授权,则上述查询将失败。 然后您必须在所有者架构本身中执行此操作。