Oracle предоставляет разрешение на выполнение - PullRequest
1 голос
/ 29 июня 2011

У меня динамический sql внутри процедуры, которая создает представление.Если я распечатаю строку и выполню ее вручную, я смогу создать представление.Однако в процедуре исключение выдается как недостаточные привилегии.Я предоставил пользователю execute, create, все по процедуре, однако он все еще не работает.Есть предложения?

Ответы [ 2 ]

5 голосов
/ 29 июня 2011

Внутри пакетов привилегии, предоставленные косвенно (через роль), отбрасываются.Вы должны предоставить необходимые привилегии для базовых объектов непосредственно учетной записи;пример:

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;

В этом примере вам нужно

grant select on A.test_tab to B;

, чтобы заставить его работать (не важно, используете ли вы динамический или статический SQL).

3 голосов
/ 29 июня 2011

На основании небольшой информации, которую вы предоставили, я полагаю, что процедура выполняется с определенными правами (по умолчанию), а владелец процедуры не имеет прав, необходимых для создания представления.Неясно, является ли подходящим решением в вашем случае создание процедуры с правами invoker или предоставление дополнительных привилегий владельцу процедуры.

Размещение фактического кода всегда полезно.Имеет ли процедура определенные или вызывающие права?Какая схема должна быть создана для представления?Каковы фактические заявления о предоставлении гранта, которые вы выполнили?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...