web-dev-qa-db-ja.com

別のスキーマにあるDBLINKを使用してOracleで選択する方法

Oracle DBMS(11g)と次の構成があります。

  • DBユーザー「MYUSER」
  • 2つのスキーマ「MYUSER」および「SCHEMA_B」
  • ユーザー「MYUSER」は「SCHEMA_B」にアクセスでき、そのテーブルに対する読み取り権限を持っています
  • 「SCHEMA_B」にあるパブリックDBリンク「DB_LINK」
  • DBユーザー「SCHEMA_B」を直接使用すると、DB_LINKが機能します

質問:「MYUSER」としてログオンした場合、「SCHEMA_B」のDBリンクを使用してテーブルにアクセスするための正しい構文は何ですか?それはまったく可能ですか?

私はすでにいくつかの星座を試しましたが、すべてはうまくいきませんでした:

select * from dual@"DB_LINK"
select * from dual@"SCHEMA_B"."DB_LINK"
select * from dual@SCHEMA_B."DB_LINK"
select * from dual@SCHEMA_B.DB_LINK
select * from SCHEMA_B.dual@DB_LINK
select * from "SCHEMA_B".dual@DB_LINK

表示されるエラーメッセージはORA-02019です。 00000-「リモートデータベースの接続の説明が見つかりません」

提案をありがとう!

12
Steffen

すべてではなく複数のユーザー間でデータベースリンクを共有することは不可能だと思います。プライベート(1人のユーザーのみ)またはパブリック(すべてのユーザー)のいずれかです。

これを回避する良い方法は、データベースリンクを介してアクセスするテーブルを公開するビューをSCHEMA_Bに作成することです。これにより、ビューへのアクセスを制御できるため、データベースリンクから選択できるユーザーを適切に制御できます。

次のようにします:

create database link db_link... as before;
create view mytable_view as select * from mytable@db_link;
grant select on mytable_view to myuser;
14
GTG