Как SELECT в Oracle с использованием DBLINK, расположенного в другой схеме?

У нас есть СУБД Oracle (11g) и следующая конфигурация:

  • Пользователь базы данных "MYUSER"
  • Две схемы "MYUSER" и "SCHEMA_B"
  • Пользователь "MYUSER" может получить доступ к "SCHEMA_B" и имеет разрешения READ для своих таблиц.
  • Публичная ссылка БД "DB_LINK", расположенная в "SCHEMA_B"
  • DB_LINK работает при непосредственном использовании пользователя базы данных "SCHEMA_B"

Вопрос. Когда вы вошли в систему как "MYUSER", каков правильный синтаксис для доступа к таблицам с использованием ссылки DB "SCHEMA_B" ? Можно ли вообще это сделать?

Я уже пробовал несколько созвездий, которые все не сработали:

select * from [email protected]"DB_LINK"
select * from [email protected]"SCHEMA_B"."DB_LINK"
select * from [email protected]_B."DB_LINK"
select * from [email protected]_B.DB_LINK
select * from [email protected]_LINK
select * from "SCHEMA_B"[email protected]_LINK

Сообщение об ошибке, которое я получаю: ORA-02019. 00000 - "описание соединения для удаленной базы данных не найдено"

Спасибо за любое предложение!

Ответ 1

Я не думаю, что можно разделить ссылку базы данных между несколькими пользователями, но не все. Они являются частными (только для одного пользователя) или общедоступными (для всех пользователей).

Хорошим способом для этого является создание представления в SCHEMA_B, которое предоставляет таблицу, к которой вы хотите получить доступ через ссылку базы данных. Это также даст вам хороший контроль над тем, кому разрешено выбирать из ссылки на базу данных, поскольку вы можете контролировать доступ к представлению.

Сделайте следующее:

create database link db_link... as before;
create view mytable_view as select * from [email protected]_link;
grant select on mytable_view to myuser;