在oracle 11g中,我有一个所有者架构,其中包含应用程序所需的相关表。
对于我的外部应用程序,我正在尝试创建另一个用户,该用户应该对上述架构的某些表具有select访问权限。 让我们调用所有者架构A和新架构B
create user B identified by blah;
grant connect to B;
登录到原始模式后,我运行以下内容(对于演示,我给所有表格选择)
begin
FOR x IN (select * from user_tables)
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON ' || x.table_name || ' TO some_role';
END LOOP;
end;
grant some_role to B;
如果我以用户B身份登录并执行类似
的查询 select count(*) from A.some_table ;
它有效。但是,如果没有创建公共同义词,我可以授予 以这样的方式,当用户B登录时,以下方式有效吗?
select count(*) from some_table;
由于
答案 0 :(得分:0)
您可以为要使用的用户B创建私人同义词。 作为用户B,运行以下块:
begin
FOR t IN (SELECT * FROM role_tab_privs WHERE grantee = 'SOME_ROLE' and owner = 'A')
LOOP
EXECUTE IMMEDIATE 'CREAETE SYNONYM ' || table_name || ' FOR A.' || table_name';
END LOOP;
end;
答案 1 :(得分:0)
如果您只是从userB拥有的表中读取数据,您可以设置以下命令并在表上运行SELECT,就像它们在userA架构中一样:
alter session set current_schema=userB
(记录为 UserA )
然后下面两个命令将是等效的(具有相同的结果):
select ... from userB.TABLE1
select ... from TABLE1
答案 2 :(得分:0)
GRANT SELECT ANY TABLE TO YOUR_USER_OR_ROL;