Синтаксис 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$). совершать. Сделанный.