Синтаксис Oracle для создания ссылки на базу данных, принадлежащей другому пользователю

типичный синтаксис для создания ссылки на БД выглядит следующим образом:

create database link remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'

но я хотел бы, чтобы моя ссылка DB принадлежала другой учетной записи после ее создания. Есть ли способ сделать это?

следующее не работает:

create database link anotheruser.remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'

3 ответов


ограничения на DBLinks - вы не можете создать ссылку базы данных в схеме другого пользователя, и вы не можете квалифицировать dblink с именем схемы.


Сатья прав, в том что CREATE DATABASE LINK синтаксис не позволяет создать ссылку на базу данных в другой схеме. ОДНАКО...

решение

это IS можно создать ссылку на базу данных в схеме другого пользователя, если anotheruser и CREATE DATABASE LINK привилегия, и пользователей вы связаны как CREATE ANY PROCEDURE привилегии.

вот обходной путь, который я использую:

    create procedure anotheruser."tmp_doit_200906121431"
    is
    begin
      execute immediate '
        create database link remote_db_link 
        connect to remote_user 
        identified by remote_password 
        using ''remote_db'' ';
    end;
    /
    begin
      anotheruser."tmp_doit_200906121431";
    end;
    /
    drop procedure anotheruser."tmp_doit_200906121431"
    /

давайте распутаем это. Первый, Я создаю процедуру в anotherusers's схема; эта процедура содержит CREATE DATABASE LINK оператор, который я хочу запустить.

когда процедура выполняется, она выполняется как владелец процедуры, так что CREATE DATABASE LINK оператор выполняется anotheruser.

имя процедуры не важно, за исключением того, что мне нужно убедиться, что оно не конфликтует с любым существующим именем объекта. Я использую строчные буквы (заключая имя процедуры в двойные кавычки), используя " tmp" чтобы пометить этот объект как "временный" и использовать текущий yyyymmddhh24miss в качестве части имени процедуры. (Обычно я запускаю запрос DBA_OBJECTS, чтобы проверить, что соответствующий object_name не существует.)

для функции администратора" одноразового " типа это жизнеспособный обходной путь. Я предпочитаю это другой альтернативе: сохранение пароля другого пользователя, изменение пароля, подключение в качестве пользователя и сброс пароля другого пользователя обратно в сохраненный.)


как пользователь sys вы можете просмотреть все ссылки БД в SYS.Вид DBA_DB_LINKS. Это представление использует link$ и user$ table. Вы можете создать новый dblink, как обычно, и показать его в таблице link$. Затем измените владельца (используйте id от user$). совершать. Сделанный.