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

Типичный синтаксис для создания ссылки на БД следующий:

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

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

Следующее НЕ работает:

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

Ответы [ 3 ]

14 голосов
/ 12 июня 2009

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

* 1007 Временное решение *

Можно 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; эта процедура содержит оператор CREATE DATABASE LINK, который я хочу выполнить.

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

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

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

8 голосов
/ 12 июня 2009

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

0 голосов
/ 30 мая 2012

Как пользователь sys вы можете просматривать все ссылки на БД в представлении SYS.DBA_DB_LINKS. В этом представлении используются ссылки $ и user $ table. Вы можете создать новую dblink как обычно, и это будет показано по ссылке $ table. Затем смените владельца (используйте идентификатор от пользователя $). совершить. Готово.

...