私は学部課程の学生であり、データベース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は信頼性が高いはずです。
編集:
ジャスティンが述べたように、Bが所有するプロシージャの実行権をAに与える方法:
GRANT EXECUTE ON b.procedure_name TO a;
Oracleのパッケージおよびストアドプロシージャは、現在ログオンしているユーザーではなく、パッケージ/プロシージャOWNERの権限を使用してデフォルトで実行されます。
そのため、たとえば、ユーザーを作成するパッケージを呼び出す場合、そのユーザーはパッケージ所有者であり、ユーザー作成特権を必要とする呼び出しユーザーではありません。呼び出し元は、パッケージに対する実行許可を持っている必要があります。
呼び出し元ユーザーの権限を使用してパッケージを実行する場合は、パッケージを作成するときに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 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」ユーザーに作成権限を付与する場合のコマンドです。