1

Oracle で、user1 の下にストアド プロシージャを作成する場合、プロシージャにパブリック シノニムを作成することと、プロシージャの実行権限をユーザー 'PUBLIC' に付与することの違いは何ですか?
私の目的は次のとおりです。ユーザー 2 は TOAD にログインし、Schema Browser に移動して、ドロップダウンから PUBLIC スキーマを選択し、手順を表示して実行できるようにする必要があります。

user2 と PUBLIC に実行許可を与え、PUBLIC シノニムを作成しようとしましたが、まだ運がありません。user2 は、PUBLIC スキーマの下のプロシージャを表示できません。

しかし、面白いことに、user2 としてログインし、TOAD (スキーマ ブラウザーではない) でエディターを開くと、次を使用して手順を実行できます。

BEGIN
PROC(arg1,arg2,arg3);
end;
4

1 に答える 1

2

オラクルsynonymは基本的に、create a pointer to an object別の場所に存在することを許可します。Oracle にログインすると、スキーマ (アカウント) でクエリしているすべてのオブジェクトが検索されるため、Oracle シノニムが必要です。それらが存在しない場合、それらが存在しないか宣言されていないことを示すエラーが表示されます。

あなたの場合user1、procを作成すると、それは彼のschema.user2に存在しますpublic schema

user2 には実行権限があるため、user2 が自分のスキーマから実行しようとすると、自分のスキーマprocを検索しようとすることを意味しproc、proc が見つからない場合は、シノニムから見つけたポインターを検索します。最後に、彼は を見つけprocて実行しようとします。これは、proc が持っているためpublic execute grants(つまり、すべてのユーザーがそれらを実行できることを意味します)、実行できるようになりprocます。

に行くとschema browsertoadのタブが見つかります。そこには、 in schemasynonymの同義語があり、さらにはschema もあります。下手な英語でごめんなさい :(procuser2public

于 2012-09-07T22:51:32.513 に答える