Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle erteilt die Berechtigung zum Ausführen

Innerhalb von Paketen werden indirekt (über eine Rolle) gewährte Berechtigungen gelöscht. Sie müssen die erforderlichen Berechtigungen für die zugrunde liegenden Objekte erteilen direkt auf das Konto; Beispiel:

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;

In diesem Beispiel benötigen Sie ein

grant select on A.test_tab to B;

damit es funktioniert (es spielt keine Rolle, ob Sie dynamisches oder statisches SQL verwenden).