授予特权并在Oracle中创建公共同义词

授予特权并在Oracle中创建公共同义词,oracle,grant,synonym,Oracle,Grant,Synonym,我在模式A中有视图,我想在模式B中为这些视图创建一个同义词 您能帮我写一个关于授予角色和创建同义词的查询吗?从用户a,您只需要将用户a的视图的选择权限授予用户B GRANT SELECT ON A.viewname1 TO B; GRANT SELECT ON A.viewname2 TO B; ... 从B开始,创建同义词允许引用用户A的视图,而不使用模式前缀(“A”) 现在,用户B可以从这些视图中进行如下选择: SELECT * FROM viewname1; 请注意,如果用户具有创建同

我在模式A中有视图,我想在模式B中为这些视图创建一个同义词


您能帮我写一个关于授予角色和创建同义词的查询吗?

从用户a,您只需要将用户a的视图的选择权限授予用户B

GRANT SELECT ON A.viewname1 TO B;
GRANT SELECT ON A.viewname2 TO B;
...
从B开始,创建同义词允许引用用户A的视图,而不使用模式前缀(“A”)

现在,用户B可以从这些视图中进行如下选择:

SELECT * FROM viewname1;

请注意,如果用户具有
创建同义词
权限,则只能使用
创建同义词

由于没有权限,无法直接创建公共同义词“授予角色”是什么意思?你能同时以A和B的身份登录吗?你不需要公共同义词。@JeffreyKemp如果我需要从模式A到B访问视图,你会建议使用什么?Gaz的回答很好(允许从A到B选择),除了删除“公共”之外,它们不需要是公共同义词。模式B只需要同义词,这样它就可以引用
viewname
,而不是
A.viewname1
。我不建议对这类事情使用公共同义词。总有一天,模式C会想要拥有自己版本的
viewname1
,结果会是一团糟。@Jeffrey:你说得对。我编辑了答案以反映这一点。
SELECT * FROM viewname1;