Oracleの別のユーザーにストアドプロシージャの権利を付与する
-
29-09-2019 - |
質問
私は学部課程の学生であり、データベースOracle 10Gモード= XEでユーザーBが所有するストアドプロシージャに対して、ユーザーAに所有権を所有権を付与することにほとんど問題に直面していません。
ストアドプロシージャXYZの所有権を別のユーザーAに付与するためのSQLコマンドを書くのを手伝ってください。
解決
「所有権の権利」とはどういう意味か理解しているかどうかはわかりません。
ユーザーBがストアドプロシージャを所有している場合、ユーザーBはユーザーにストアドプロシージャを実行する許可を与えることができます
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;
他のヒント
あなたは私があなたがしていると思うことをすることはできません。
手順で付与できる唯一の特権は、実行とデバッグです。
ユーザーBがユーザーに手順を作成できるようにする場合は、ユーザーBに手順の特権を作成する必要があります。手順を変更してドロップする手順は、ユーザーBの手順を変更またはドロップするために必要な他の適用される特権です。すべての範囲の特権は、ユーザーBを特定のスキーマに制限しないためです。ユーザーBは、これらの特権を認めれば、非常に信頼される必要があります。
編集:
ジャスティンが述べたように、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
お役に立てれば。
DBAアカウントで、userBに助成金を使用して手順を作成する権利を与えます grant create any procedure to USERB
手順が見えます
CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
BEGIN
--DO SOMETHING HERE
END
END
GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA
私はこれが非常に古い質問であることを知っていますが、私はそれを少し削ることができることを望んでいます。
SQL> grant create any procedure to testdb;
これは、「testDB」ユーザーにCREATE特権を与えたい場合のコマンドです。