Bên trong các gói, các đặc quyền được cấp gián tiếp (thông qua một vai trò) bị loại bỏ. Bạn phải cấp các đặc quyền cần thiết trên các đối tượng cơ bản vào tài khoản trực tiếp; ví dụ:
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;
Trong ví dụ này, bạn cần một
grant select on A.test_tab to B;
để làm cho nó hoạt động (không quan trọng bạn đang sử dụng SQL động hay tĩnh).