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

userB が所有するテーブルからデータを読み取るだけの場合は、以下のコマンドを設定して、userA スキーマにあるかのようにテーブルで SELECT を実行できます。

alter session set current_schema=userB

( UserAとして記録されます)

次に、以下の 2 つのコマンドは同等になります (結果は同じです)。

select ... from userB.TABLE1

select ... from TABLE1
于 2013-11-01T19:13:31.060 に答える
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 に答える