2011-06-29 8 views
1

ビューを作成するプロシージャ内に動的SQLがあります。文字列を印刷して手動で実行すると、ビューを作成できます。ただし、このプロシージャでは、権限が不十分なため例外がスローされます。私は、ユーザーにプロシージャを実行、作成、すべてを許可しましたが、それでも動作しません。助言がありますか?実行のためのOracle付与権限

答えて

5

パッケージ内では、間接的に(ロール経由で)付与された権限は削除されます。必要な特権を基になるオブジェクトに直接アカウントに付与する必要があります。例:この例では

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; 

は、あなたが

grant select on A.test_tab to B; 

(あなたが動的または静的SQLを使用しているかどうかは関係ありません)それを動作させる必要があります。

3

私が推測した小さな情報によれば、プロシージャは定義者権限(デフォルト)で実行されており、プロシージャの所有者にはビューの作成に必要な権限がありません。あなたの場合の適切な解決方法が、代わりに呼び出し者権限を持つプロシージャを作成するか、プロシージャの所有者に追加の権限を与えるかどうかは不明です。

実際のコードを投稿すると常に役立ちます。プロシージャには定義者権限または実行者権限がありますか?どのスキーマがビューを作成するはずですか?実行した実際の助成金は何ですか?

関連する問題