首页 文章

选择对所有表的访问权限

提问于
浏览
0

在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

    您可以为要使用的用户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;
    
  • 0

    如果您只是从userB拥有的表中读取数据,则可以设置以下命令并在表上运行SELECT,就像它们位于userA模式中一样:

    alter session set current_schema=userB
    

    (记录为UserA)

    然后下面两个命令将是等效的(具有相同的结果):

    select ... from userB.TABLE1
    
    select ... from TABLE1
    
  • 0
    GRANT SELECT ANY TABLE TO YOUR_USER_OR_ROL;
    

相关问题