Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle concede permissão para execução


Dentro dos pacotes, os privilégios concedidos indiretamente (por meio de uma função) são descartados. Você deve conceder os privilégios necessários nos objetos subjacentes diretamente na conta; exemplo:
conn sys/example@sqldat.com as sysdba
create user A identified by A;
grant connect, dba to A;
conn A/example@sqldat.com
create table test_tab(pk number);

conn sys/example@sqldat.com as sysdba
create user B identified by B;
grant connect, dba to B;
conn B/example@sqldat.com
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;

Neste exemplo, você precisa de um
grant select on A.test_tab to B;

para fazê-lo funcionar (não importa se você está usando SQL dinâmico ou estático).