Внутри пакетов привилегии, предоставленные косвенно (через роль), отбрасываются.Вы должны предоставить необходимые привилегии для базовых объектов непосредственно учетной записи;пример:
conn sys/sys@DB as sysdba
create user A identified by A;
grant connect, dba to A;
conn A/A@DB
create table test_tab(pk number);
conn sys/sys@DB as sysdba
create user B identified by B;
grant connect, dba to B;
conn B/B@DB
select * from A.test_tab; -- this works
create or replace procedure do_it as
l_cnt pls_integer;
begin
select count(*) into l_cnt from A.test_tab; -- error on compile
end;
В этом примере вам нужно
grant select on A.test_tab to B;
, чтобы заставить его работать (не важно, используете ли вы динамический или статический SQL).