|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
Всем привет. Пытаюсь понять следующий кейс. 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.
Я предполагал, что или получу ошибку или все равно заюзаю приватный линк юзера А. Но не результат от паблик линка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:16 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
Ты ему сказал - теперь ищи db_link_x в пространстве имён схемы B, а если не найдёшь сходи посмотри нет ли такого в PUBLIC, он так и отработал. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:24 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednik, для USER A в схеме B нет dblink_X, есть только в PUBLIC, он туда и пошёл ну и собственно нет повода для ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:30 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
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 не должно влиять на него. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 13:57 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednik current_schema применяется для всех объектов без "квалификатора". "In subsequent SQL statements, Oracle Database uses this schema name as the schema qualifier when the qualifier is omitted." дблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него. Его нет, так как он приватный, он невидим из другой схемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 14:06 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
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 не должна апплаится к таблице с дблинком, потому как она имеет квалификатор. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:17 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednikЯ к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор. нет, для этого нужно явно указать схему, указание db_link не заменяет квалификатор схемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:37 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
Vivat!San так как он приватный аргумент так себе. таблица тоже приватна, но она же видна из другой схемы при наличии грантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 01:26 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednikдблинк есть в данном случае квалификатор таблицы, поэтому вроде как current_schema не должно влиять на него. еще из-за безопасности вроде как такое поведение. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 01:36 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
х.з.Vivat!San так как он приватныйаргумент так себе. таблица тоже приватна, но она же видна из другой схемы при наличии грантов.Таблица, конечно, тоже может быть создана как public, но это не повод для отождествления понятия приватности. К дблинку не предусмотрено квалификатора схемы и его в принципе нельзя адресовать в другой схеме ни в запросах, ни в ddl. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 06:44 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednikVivat!Sanпропущено... Его нет, так как он приватный, он невидим из другой схемы. Я к тому, что current_schema не должна апплаится к таблице с дблинком, потому как она имеет квалификатор.db_link является квалификатором таблицы, поэтому к ее имени не надо добавлять "B." -- это верно Но само описание db_link уже не будет искаться в схеме A, а из схемы B оно недоступно (по соображениям секурности в первую очередь, но и не надо забывать что по синтаксису "." вполне себе разрешена в имени db_link, поэтому добавление "B." к имени db_link-а это точно не то, что надо) Но зато вполне себе доступно описание PUBLIC DB_LINK с таким же именем, почему бы его не использовать. PS. Можно обернуть вызов в функцию (AUTHID DEFINER) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 06:54 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров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.
я получу данные из таблицы A.TABLE_NAME и из TABLE_NAME при наличии грантов. Я понимаю, что с дблинком есть нюанс с точки зрения секурности, поэтому и ожидаю что для дблинка "alter session set current_schema=B;" будет или проигнорировано или я получу ORA-02019: connection description for remote database not found ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:16 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 18:03 |
|
dblink + current_schema = ?
|
|||
---|---|---|---|
#18+
pravednikЕсли дб_линк является квалификатором объекта, то "полное" имя этого не должно меняться(так как оно уже и так полное). Ну то есть, при Код: plsql 1. 2. 3. 4.
я получу данные из таблицы A.TABLE_NAME и из TABLE_NAME при наличии грантов . Я понимаю, что с дблинком есть нюанс с точки зрения секурности, поэтому и ожидаю что для дблинка "alter session set current_schema=B;" будет или проигнорировано или я получу ORA-02019: connection description for remote database not foundПричем либо объектных, а если их нет, то с помощью системных С линком похоже -- описания частного уже не видно, но публичный доступен. Убери его и получишь ожидаемую ORA-02019 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 05:18 |
|
|
start [/forum/topic.php?fid=52&msg=39825081&tid=1882402]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 401ms |
0 / 0 |