web-dev-qa-db-ja.com

どうすればユーザーに与えて、別のユーザーの機能を実行できますか?

関数を別のユーザー関数を呼び出す特権をユーザーに付与したい。

私はこれを書きます:GRANT EXECUTE ANY FUNCTION TO user;

しかし、それは機能しません。

ユーザーはこれを呼び出す必要があります:

call XXX.YYY.AlterAllInvalidObjects(NULL,'PACKAGE BODY');

しかし、どうすれば助成金を与えることができますか?

注:使用したくない:GRANT EXECUTE ON FUNCTION AlterAllInvalidObjects TO user;特定の関数名ではなく一般的な解決策が必要です。

6
Ersin Gülbahar
GRANT EXECUTE ANY PROCEDURE TO user;

http://docs.Oracle.com/cd/B19306_01/server.102/b14200/statements_9013.htm#i2077938

機能と手順の両方を管理します。関数だけにその方法を許可することはできません...

[〜#〜]編集[〜#〜]

他の方法(ただし、他のユーザーがすべての許可を取得するために新しい関数を作成するたびに実行する必要があります):

実行

select 'GRANT EXECUTE ON '||owner||'.'||object_name||' TO user;'
from all_objects
where owner = 'xxx'
and object_type='FUNCTION';

結果をコピーして貼り付けて実行します。

または、SP同じことを実行します(クエリにカーソルを置き、ループ内ですぐに実行します)を使用します

7

正直なところ、許可ではなく同義語について質問しているように見えます。許可は、スキーマに言及せずにAlterAllInvalidObjectsの呼び出しを呼び出すのに役立たないためです。 http://docs.Oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm について検討してください。

0