Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle accorde l'autorisation d'exécution

Dans les packages, les privilèges accordés indirectement (via un rôle) sont supprimés. Vous devez accorder les privilèges nécessaires sur les objets sous-jacents directement sur le compte ; exemple :

conn sys/[email protected] as sysdba
create user A identified by A;
grant connect, dba to A;
conn A/[email protected]
create table test_tab(pk number);

conn sys/[email protected] as sysdba
create user B identified by B;
grant connect, dba to B;
conn B/[email protected]
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;

Dans cet exemple, vous avez besoin d'un

grant select on A.test_tab to B;

pour le faire fonctionner (peu importe que vous utilisiez du SQL dynamique ou statique).