powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dblink + current_schema = ?
14 сообщений из 14, страница 1 из 1
dblink + current_schema = ?
    #39824846
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Пытаюсь понять следующий кейс.
Oracle 18c.

Есть private dblink_х в схеме А смотрящий на Host_1
Есть private dblink_х в схеме B смотрящий на Host_1
Есть public dblink_х смотрящий на Host_2.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 -- connect A

SQL>  select host_name from v$instance@dblink_х;

HOST_NAME
----------------------------------------------------------------
Host_1

SQL>  alter session set current_schema=B;

Session altered.

SQL> select host_name from v$instance@dblink_х;

HOST_NAME
----------------------------------------------------------------
Host_2



Я предполагал, что или получу ошибку или все равно заюзаю приватный линк юзера А.
Но не результат от паблик линка.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39824853
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты ему сказал - теперь ищи db_link_x в пространстве имён схемы B,
а если не найдёшь сходи посмотри нет ли такого в PUBLIC, он так и отработал.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39824859
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednik,

для USER A в схеме B нет dblink_X, есть только в PUBLIC,
он туда и пошёл ну и собственно нет повода для ошибки.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39824942
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vivat!SanТы ему сказал - теперь ищи db_link_x в пространстве имён схемы B,
а если не найдёшь сходи посмотри нет ли такого в PUBLIC, он так и отработал.

current_schema применяется для всех объектов без "квалификатора".
"In subsequent SQL statements, Oracle Database uses this schema name as the schema qualifier when the qualifier is omitted."
дблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39824947
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednik
current_schema применяется для всех объектов без "квалификатора".
"In subsequent SQL statements, Oracle Database uses this schema name as the schema qualifier when the qualifier is omitted."
дблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него.

Его нет, так как он приватный, он невидим из другой схемы.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825071
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vivat!Sanpravednikcurrent_schema применяется для всех объектов без "квалификатора".
"In subsequent SQL statements, Oracle Database uses this schema name as the schema qualifier when the qualifier is omitted."
дблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него.

Его нет, так как он приватный, он невидим из другой схемы.
Я к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825081
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikЯ к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.

нет, для этого нужно явно указать схему, указание db_link не заменяет квалификатор схемы.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825151
х.з.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vivat!San так как он приватный
аргумент так себе. таблица тоже приватна, но она же видна из другой схемы при наличии грантов.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825152
х.з.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikдблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него.
еще из-за безопасности вроде как такое поведение.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825167
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
х.з.Vivat!San так как он приватныйаргумент так себе. таблица тоже приватна, но она же видна из другой схемы при наличии грантов.Таблица, конечно, тоже может быть создана как public, но это не повод для отождествления понятия приватности. К дблинку не предусмотрено квалификатора схемы и его в принципе нельзя адресовать в другой схеме ни в запросах, ни в ddl.
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825168
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikVivat!Sanпропущено...


Его нет, так как он приватный, он невидим из другой схемы.
Я к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.db_link является квалификатором таблицы, поэтому к ее имени не надо добавлять "B." -- это верно
Но само описание db_link уже не будет искаться в схеме A, а из схемы B оно недоступно (по соображениям секурности в первую очередь, но и не надо забывать что по синтаксису "." вполне себе разрешена в имени db_link, поэтому добавление "B." к имени db_link-а это точно не то, что надо)
Но зато вполне себе доступно описание PUBLIC DB_LINK с таким же именем, почему бы его не использовать.

PS. Можно обернуть вызов в функцию (AUTHID DEFINER)
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825219
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровpravednikпропущено...

Я к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.db_link является квалификатором таблицы, поэтому к ее имени не надо добавлять "B." -- это верно
Но само описание db_link уже не будет искаться в схеме A, а из схемы B оно недоступно (по соображениям секурности в первую очередь, но и не надо забывать что по синтаксису "." вполне себе разрешена в имени db_link, поэтому добавление "B." к имени db_link-а это точно не то, что надо)
Но зато вполне себе доступно описание PUBLIC DB_LINK с таким же именем, почему бы его не использовать.

PS. Можно обернуть вызов в функцию (AUTHID DEFINER)
Ок.

авторНо само описание db_link уже не будет искаться в схеме A
Вот это меня как раз и "беспокоит".

Если дб_линк является квалификатором объекта, то "полное" имя этого не должно меняться(так как оно уже и так полное).
Ну то есть, при
Код: plsql
1.
2.
3.
4.
--conn A
alter session set current_schema=B;
select * from A.TABLE_NAME;
select * from TABLE_NAME;


я получу данные из таблицы A.TABLE_NAME и из TABLE_NAME при наличии грантов.
Я понимаю, что с дблинком есть нюанс с точки зрения секурности, поэтому и ожидаю что для дблинка
"alter session set current_schema=B;" будет или проигнорировано или я получу
ORA-02019: connection description for remote database not found
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825538
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednik,

Doc ID 793693.1CAUSE
Bug 4416663 DATABASE LINK FAILS WITH ORA-2019 WHEN CURRENT_SCHEMA SET TO ANOTHER USER
Closed as this is an expected behaviour
...
Рейтинг: 0 / 0
dblink + current_schema = ?
    #39825633
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikЕсли дб_линк является квалификатором объекта, то "полное" имя этого не должно меняться(так как оно уже и так полное).
Ну то есть, при
Код: plsql
1.
2.
3.
4.
--conn A
alter session set current_schema=B;
select * from A.TABLE_NAME;
select * from TABLE_NAME;


я получу данные из таблицы A.TABLE_NAME и из TABLE_NAME при наличии грантов .
Я понимаю, что с дблинком есть нюанс с точки зрения секурности, поэтому и ожидаю что для дблинка
"alter session set current_schema=B;" будет или проигнорировано или я получу
ORA-02019: connection description for remote database not foundПричем либо объектных, а если их нет, то с помощью системных
С линком похоже -- описания частного уже не видно, но публичный доступен. Убери его и получишь ожидаемую ORA-02019
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dblink + current_schema = ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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