私は学部課程の学生であり、データベース Oracle 10g mode =xe でユーザー B が所有するストアド プロシージャに対して、ユーザー A に所有権を付与する際にほとんど問題に直面しています。
ストアド プロシージャ xyz の所有権を別のユーザー A に付与するための SQL コマンドの作成を手伝ってください。
私は学部課程の学生であり、データベース Oracle 10g mode =xe でユーザー B が所有するストアド プロシージャに対して、ユーザー A に所有権を付与する際にほとんど問題に直面しています。
ストアド プロシージャ xyz の所有権を別のユーザー A に付与するための SQL コマンドの作成を手伝ってください。
「所有権」の意味がよくわかりません。
ユーザー B がストアド プロシージャを所有している場合、ユーザー B はストアド プロシージャを実行する権限をユーザー A に付与できます。
GRANT EXECUTE ON b.procedure_name TO a
次に、ユーザー A は、完全修飾名を使用してプロシージャーを呼び出します。つまり、
BEGIN
b.procedure_name( <<list of parameters>> );
END;
別の方法として、ユーザー A はシノニムを作成して、完全修飾プロシージャー名を使用する必要をなくすことができます。
CREATE SYNONYM procedure_name FOR b.procedure_name;
BEGIN
procedure_name( <<list of parameters>> );
END;
あなたは私があなたが求めていると思うことをすることができません。
プロシージャに対して付与できる権限は、EXECUTE と DEBUG だけです。
ユーザー B がユーザー A スキーマでプロシージャを作成できるようにするには、ユーザー B に CREATE ANY PROCEDURE 権限が必要です。ALTER ANY PROCEDURE および DROP ANY PROCEDURE は、ユーザー B のユーザー A プロシージャを変更または削除するために必要なその他の適用可能な権限です。ユーザー B を特定のスキーマに制限しないため、すべて広範囲の権限です。これらの権限が付与されている場合、ユーザー B は非常に信頼されている必要があります。
編集:
Justin が述べたように、B が所有するプロシージャの実行権を A に与える方法は次のとおりです。
GRANT EXECUTE ON b.procedure_name TO a;
Oracle のパッケージとストアド プロシージャは、デフォルトで、現在ログオンしているユーザーではなく、パッケージ/プロシージャの所有者の権限を使用して実行されます。
たとえば、ユーザーを作成するパッケージを呼び出す場合、そのパッケージの所有者は、ユーザー作成権限を必要とする呼び出し元のユーザーではありません。呼び出し元には、パッケージに対する実行権限が必要です。
呼び出し元のユーザーのアクセス許可を使用してパッケージを実行する必要がある場合は、パッケージを作成するときに AUTHID CURRENT_USER を指定する必要があります。
Oracle ドキュメント「Invoker Rights vs Definer Rights」に詳細情報がありますhttp://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575
お役に立てれば。
SQL> grant create any procedure to testdb;
「testdb」ユーザーにcreate権限を付与したい場合のコマンドです。