Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dblink + current_schema = ? / 14 сообщений из 14, страница 1 из 1
10.06.2019, 11:16
    #39824846
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
Всем привет.
Пытаюсь понять следующий кейс.
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
10.06.2019, 11:24
    #39824853
Vivat!San
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
Ты ему сказал - теперь ищи db_link_x в пространстве имён схемы B,
а если не найдёшь сходи посмотри нет ли такого в PUBLIC, он так и отработал.
...
Рейтинг: 0 / 0
10.06.2019, 11:30
    #39824859
Vivat!San
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
pravednik,

для USER A в схеме B нет dblink_X, есть только в PUBLIC,
он туда и пошёл ну и собственно нет повода для ошибки.
...
Рейтинг: 0 / 0
10.06.2019, 13:57
    #39824942
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
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
10.06.2019, 14:06
    #39824947
Vivat!San
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
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
10.06.2019, 18:17
    #39825071
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
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
10.06.2019, 18:37
    #39825081
Vivat!San
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
pravednikЯ к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.

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


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

PS. Можно обернуть вызов в функцию (AUTHID DEFINER)
...
Рейтинг: 0 / 0
11.06.2019, 10:16
    #39825219
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
Вячеслав Любомудров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
11.06.2019, 18:03
    #39825538
проходил мимо...
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
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
12.06.2019, 05:18
    #39825633
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dblink + current_schema = ?
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dblink + current_schema = ? / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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