Oracle授予执行权限

Rne*_*net 1 oracle permissions

我在一个创建视图的过程中有一个动态sql.如果我打印字符串并手动执行它,我就可以创建视图了.但是在该过程中,由于权限不足而抛出异常.我已经为用户授予了执行,创建,所有程序,但它仍然无效.有什么建议?

Fra*_*itt 5

在内部包中,间接(通过角色)授予的权限被删除.您必须直接向帐户授予基础对象的必要权限; 例:

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;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,你需要一个

grant select on A.test_tab to B;
Run Code Online (Sandbox Code Playgroud)

使其工作(无论您使用的是动态SQL还是静态SQL都没关系).