Как найти все вложенные зависимые объекты в Oracle при вызове процедуры из другой схемы - PullRequest
0 голосов
/ 16 октября 2018

У меня есть 2 схемы - A & B. У меня есть процедура в пакете в схеме A, на которую я хочу сослаться из схемы B. Я дал грант на этот пакет в схеме A и создал синоним для этогов схеме B. Но процедура вызывает ряд процедур внутри друг друга.Поэтому, когда я запускаю процедуру, она дает таблицу / представление не существует.Я попытался найти зависимые объекты и дать грант и создать синонимы для немногих из них.Но, похоже, список зависимых объектов слишком длинный.Итак, мне просто интересно, есть ли способ, я могу узнать все объекты, для которых мне нужно предоставить и создать синоним за один раз, а не запускать и проверять один за другим ..

Спасибо заВаша помощь.

Абха.

1 Ответ

0 голосов
/ 16 октября 2018

Я могу подумать о некоторых различных топологиях, которые могут вызвать эту проблему, - и я начну с самого простого объяснения, которое я могу придумать первым.

Если у вас есть таблицы и ваш код (пакеты) на схеме A.

С учетом следующих тестовых объектов

create table tst_table(tst_val int); 

create or replace package tst_pkg as 
  procedure tst_insert; 
end tst_pkg; 
/

create or replace package body tst_pkg  as 
  procedure tst_insert as
  begin
    insert into tst_table (tst_val) values (44); 
  end; 
end tst_pkg; 
/

Вы можете предоставить выполнение в tst_pkg другомупользователь aka schema B и этот другой пользователь смогут использовать процедуру tst_insert - следующим образом

SQL> exec iasim.tst_pkg.tst_insert;

PL/SQL procedure successfully completed.

Но - если у вас есть эта топология и вам нужно определить свой пакет, используя "authid current_user" - тогдапредоставленное выполнение больше не является достаточным.

Если вы измените определение своего пакета на

create or replace package tst_pkg authid current_user as 
  procedure tst_insert; 
end tst_pkg; 
/

Вы получите эту ошибку при попытке выполнить процедуру

SQL> exec iasim.tst_pkg.tst_insert;
BEGIN iasim.tst_pkg.tst_insert; END;

*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "IASIM.TST_PKG", line 4
ORA-06512: at line 1

Так что - если это такВы должны просто скомпилировать ваш пакет без "authid current_user" и предоставить пользователю привилегию исполнения - которая является привилегиями, необходимыми для вставки строк в tst_table, в моем примере, если это сделано с помощью процедуры в test_pkg.

Пожалуйста, дайте мне знать, если это поможет или вы расставили кусочки по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...