选择对所有表的访问权限

时间:2013-11-01 18:53:59

标签: sql oracle plsql oracle11g

在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;

由于

3 个答案:

答案 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;