powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DB-LINK на другую схему в ту же базу - плохо?
25 сообщений из 49, страница 1 из 2
DB-LINK на другую схему в ту же базу - плохо?
    #39742237
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, привет.

Кратко: насколько потенциально опасно делать DB-LINK на другую схему в ту же базу?
Грант не помогает :(

Детально:
Находимся в схеме-1 (C1). Есть вторая схема (C2), где надо вызвать функцию F (сторонний вендор, куча кода). Эта функция использует вызов функции sys_context(). Контекст же устанавливается триггером на LOGON.
Если коннектимся на схему S2: триггер отрабатывает, у функции один результат.
Если коннектимся на схему S1: права вызова через грант, триггер не отрабатывает, у функции другой результат.
Получается запустить, если сделать DB-LINK в пределах одной базы со схемы-1 на схему-2.
Насколько это опасно? Ну вдруг оракл не рекомендует такой финт. Вроде бы тесты работают.

Ну или вдруг подскажете решение проще?
Спасибо.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742246
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shurka22,
Сам себе отвечу: есть решение без ДБ-линка, если на схеме-1 повторить логику триггера схемы-2 ON LOGON. Надо разбираться в логике этого кода, он местами завязан на USER. В общем затея возможная, но не самая простая.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742352
A K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dblink в той же бд, разумно использовать если у вас схемы могут мигрировать между базами (их могут перемещать в другие бд в зависимости от разных условий), еще очень удобно, если используется стендбай для балансировки нагрузки при распределении запросов (что бы из праймари обратиться запросом к стендбаю и наоборот), но в вашем случае, насколько я правильно вас понял, нужно создавать хранимки с invoker_rights_clause. Тогда они будут себя вести по-разному в зависимости от того, кто их вызывает. Почитайте Тома Кайта! Он очень хорошо описывает эти хранимки.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742642
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A Kно в вашем случае, насколько я правильно вас понял, нужно создавать хранимки с invoker_rights_clause.
Вы про authid current_user? Кажется, что мне это не поможет.

У меня случай такой: процедура в схеме-2 отрабатывает корректно при следующих условиях:
1) сработал триггер ON LOGON, который устанавливает переменные контекста
2) запрос "SELECT USER FROM DUAL" - возвращает значение "схема-2". На это завязана как минимум раздача неких прикладных прав.

При вызове через DB-link оба условия выполняются.

При вызове через гранты:
1) триггер мы можем щёлкнуть вручную
2) но подменить USER - мне представляется проблематичным. Или как-то можно?
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742660
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Или как-то можно?Согласовать со "сторонним вендором" не хакерский, а легальный способ взаимодействия - не судьба?
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742663
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicСогласовать со "сторонним вендором" не хакерский, а легальный способ взаимодействия - не судьба?
Видимо да, не судьба.
Руководство настаивает на анализе кода стороннего вендора, и написании аналога кода, чтобы делать то же самое, но со схемы-1.
Аргументы: нецелевое использование ДБ-линка. Используем не так, как задумал оракл. Уж лучше вообще отказаться от решения задачи, чем через такой дб-линк. Петлю из двух дб-линков (на вторую базу, и потом назад) - тоже отвергли.
Сейчас задача решена через джоб: на схеме-1 создаём задание для джоба. На схеме-2 время от времени запускается джоб, который исполняет это задание. Криво, долго, не синхронно, но работает.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742665
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы переформулировал задачу так:

Как из схемы-1 (user-1) вызвать процедуру П() на схеме-2 (user-2), чтобы эта процедура выполнилась, как будто мы зашли в оракл и выполнили её от имени user-2?

А именно:
1) щёлкнулись все триггеры, которые щёлкаются при логине user-2. Это ON LOGON, может быть что-то ещё есть.
2) "select user from dual" говорил бы именно user-2, а не user-1 (user-1 он скажет, если мы просто дадим грант, и позовём из схемы-1).
3) что-то ещё?
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742670
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742673
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Используем не так, как задумал оракл.Не так, как задумал вендор . Голь на выдумки хитра?
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742677
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Viewer https://oracle-base.com/articles/misc/proxy-users-and-connect-through#proxy-user-and-connect-through
?
Как я понимаю, вы предлагаете user-1 сделать прокси-пользователем для user-2. Так? То есть залить все объекты схемы-1 в схему-2.
Это можно сделать и без прокси-пользователя. Но крайне нежелательно, а скорее - невозможно. Обе схемы очень большие, старые, давно работают.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742679
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicНе так, как задумал вендор . Голь на выдумки хитра?
Ну вдруг есть более изящное решение? ДБ-линк на ту же БД - он мне и самому не сильно нравится. Просто я не вижу решения дешевле.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742680
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Как я понимаю, вы предлагаете ... залить все объекты схемы-1 в схему-2
Это ваши домыслы...
Вы же хотели:
shurka221) щёлкнулись все триггеры, которые щёлкаются при логине user-2
2) "select user from dual" говорил бы именно user-2, а не user-1
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742689
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

общаться между сессиями (user1/user2) можно через dbms_pipe

user2 логинется как технический (c onlogon-ом, контекстом і тд) и ждет указания какую процедуру/ф-цию вызвать

....
stax
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742693
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Viewershurka22Как я понимаю, вы предлагаете ... залить все объекты схемы-1 в схему-2
Это ваши домыслы...
Вы же хотели:
shurka221) щёлкнулись все триггеры, которые щёлкаются при логине user-2
2) "select user from dual" говорил бы именно user-2, а не user-1
Всё верно. Видимо я вас не понял.

Давайте по шагам:
Схема-1/user-1, схема-2/user-2 - остаются без изменений.
Создаём user-3, который прокси-пользователь для user-2.
То есть логинимся как user-3, но получаем все права, как user-2.
Как я понимаю, схемой для user-3 будет схема-2. Да пусть даже и схема-3 - это не важно.

А дальше-то что?

Когда я из под пользователя user-1 пойду вызывать процедуру схема2.П() (по любой цепочке, через схему-3, или напрямую), то "select user from dual" у меня всё равно будет user-1, а не user-2. То есть процедура П() отработает неверно.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742695
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22ElicНе так, как задумал вендор . Голь на выдумки хитра?Ну вдруг есть более изящное решение?Ещё раз. Не "ломайте" вендора. Лучше договоритесь с ним.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742696
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxshurka22,
общаться между сессиями (user1/user2) можно через dbms_pipe

Тут сразу гроздь проблем:
1) пайп - достаточно капризный механизм, это не дб-линк. для чтения пайпы, надо сразу на схеме-2 поднять какой-то джоб или процесс, который будет непрерывно его слушать. любой джоб или процесс - головная боль для админов, надо следить, чтобы не упал. Вовремя опускать/поднимать.
2) нужно не только вызвать функцию, но и узнать результат. В случае процедуры - понять, что процедура не сломалась. Как это сделать через пайп - я не знаю. Ну то есть сделать-то можно, но это ещё более криво, чем всё остальное.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742699
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicЕщё раз. Не "ломайте" вендора. Лучше договоритесь с ним.
Вендор уже "поломан" :)
Часть логики вендора уже переписана (до меня).
Видимо, придётся и тут грызть гранит.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742700
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Часть логики вендора уже переписана (до меня).Таки голь.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742702
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Давайте по шагам:
Схема-1/user-1, схема-2/user-2 - остаются без изменений.
Создаём user-3, который прокси-пользователь для user-2.
То есть логинимся как user-3, но получаем все права, как user-2.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> alter user USER1  grant connect through USER2;

User altered.

SQL> connect USER1[USER2]
Enter password:
   <пароль_user1>
Connected.

SQL> show user
USER is "USER2" 
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742706
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

с помощью джоба как узнаете результат?

pipe не панацея, а как один из вариантов
user1 может через pipe общатся с user2,
не только просить запуск процедуры но и как дела, чем занят, настроение и тд

.....
stax
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742715
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxshurka22,
с помощью джоба как узнаете результат?

Как узнаЁм сейчас?
Никак не узнаём - в этом-то и беда, асинхрон у нас. Ну то есть узнаём, но позже. Это и есть главная проблема.

Очень хочется сделать так, чтобы когда схема-1 захотела позвать схема2.П(), она сразу бы (в синхронном режиме) получила результат работы.

Staxpipe не панацея, а как один из вариантов
user1 может через pipe общатся с user2,
не только просить запуск процедуры но и как дела, чем занят, настроение и тд
Спросить-то можно, ответ в синхронном режиме никак не получить.
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742720
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Viewer
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> alter user USER1  grant connect through USER2;

User altered.

SQL> connect USER1[USER2]
Enter password:
   <пароль_user1>
Connected.

SQL> show user
USER is "USER2" 


Спасибо, теперь понял. Видимо всё равно не годится.
Мы не просто вызываем функцию схема2.П() из схемы-1, а из процедур/функций схемы-1. Все обработчики коннектятся на схему-1 и работают с объектами схемы-1. И вот одна из функций схемы-1 (пусть схема1.Ф1()) хочет вызвать процедуру схема2.П(), причём вызвать так, как будто бы схема2.П() исполнялась бы из под пользователя user2. Вызвать, и сразу (в синхронном режиме) получить результат работы - от ответа будет зависеть дальнейшая логика функции схема1.Ф1().
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742721
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22Спросить-то можно, ответ в синхронном режиме никак не получить.
я наверное чего-то не понимаю

разработать протокол диалога user1 i user2

грубо
логинется user2 и ждет
1 по пайпу спашивает 2 как дела, готов ли ты к работе
если 2 готов, 1 дает ему задание и переходит в режим ожидания
2 выполнил процедуру и расказывает 1 как все прошло
1 благодарит за оказанную услугу и занимается своим делом
2 переходит в режим ожидания

.....
stax
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742734
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxразработать протокол диалога user1 i user2
Всё так.
Сейчас всю эту задачу может решить ДБ-линк. Получится куда как проще, дешевле и надёжнее. И время отклика будет на порядки быстрее.
Я и спросил: нет ли более изящного решения, чем ДБ-линк?
...
Рейтинг: 0 / 0
DB-LINK на другую схему в ту же базу - плохо?
    #39742766
BTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BTM
Гость
shurka22,

Это нормальное решение, называется loopback db_link, довольно распространенное,
и Том Кайт одобряет авторIt is useful for connecting as another user in your current session (eg: the loopback link can connect as scott/tiger whilst you are logged in as bob)
, и вашу задачу решает. Не умножайте сущности.
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DB-LINK на другую схему в ту же базу - плохо?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]