0

在 oracle 11g 中,我有一个所有者模式,其中包含应用程序所需的相关表。

对于我的外部应用程序,我正在尝试创建另一个用户,该用户应该对上述模式的某些表具有选择访问权限。让我们调用所有者模式 A 和新模式 B

  create user B identified by blah;
  grant connect to B;

登录到原始模式 A 后,我运行了以下命令(对于演示,我在所有表上进行选择)

  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;

谢谢

4

3 回答 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;
于 2013-11-01T18:58:55.877 回答
0

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

alter session set current_schema=userB

(记录为UserA

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

select ... from userB.TABLE1

select ... from TABLE1
于 2013-11-01T19:13:31.060 回答
0
GRANT SELECT ANY TABLE TO YOUR_USER_OR_ROL;
于 2015-10-27T11:59:29.963 回答