2010-11-29 26 views
8

私は学部学生です。データベースOracle 10gモードでユーザーBが所有するストアド・プロシージャに対して、ユーザーAに所有権を与えることにほとんど問題がありません= xe。ストアド・プロシージャの権限をOracleの別のユーザーに付与

私はあなたが「所有権」によって何を意味するかを理解していることを確認しないんだけど、他のユーザAにストアドプロシージャXYZに

答えて

20

を所有する権利を付与するための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; 
4

私はあなたがしたいと思っていることをすることはできません。

プロシージャに付与できる権限は、EXECUTEとDEBUGのみです。

ユーザーBがユーザーAスキーマ内でプロシージャを作成できるようにするには、ユーザーBにCREATE ANY PROCEDURE権限が必要です。 ALTER ANY PROCEDUREおよびDROP ANY PROCEDUREは、ユーザーBのユーザーAプロシージャーを変更または削除するために必要なその他の適用可能な特権です。ユーザーBを特定のスキーマに制限しないため、すべてが幅広い特権です。これらの権限が付与されている場合、ユーザーBは信頼性が高くなければなりません。

EDIT:

ジャスティンが述べたように、Bが所有する手続きのために実行権限を与える方法:

GRANT EXECUTE ON b.procedure_name TO a; 
+1

+1 CREATE ANY PROCEDUREよりも劇的なアプローチではなく、アプリケーションBにユーザーAを使用してそのユーザーとしてログインできるようにユーザーAにパスワードを与えるという落とし穴があります。スキーマ・レベルの権限を付与するように思えますが、Oracleでは使用できません。 –

+0

さて、私は、ユーザーBのストアドプロシージャを実行するためにUserAに実行権を与える方法を教えてください。 – Basmah

0

パッケージおよびストアドプロシージャOracleでの権利を使用して、デフォルトで実行パッケージ/プロシージャーOWNER、現在ログオンしているユーザーではありません。

たとえば、ユーザーを作成するパッケージを呼び出すと、パッケージの所有者であり、作成ユーザー特権が必要な呼び出しユーザーではありません。呼び出し元は、パッケージに対する実行権限を持っている必要があります。

あなたは、パッケージには、呼び出し元のユーザーの権限を使用して実行する必要があることを好む場合は、パッケージを作成するとき、あなたはAUTHID CURRENT_USERを指定する必要が

Oracleのドキュメント「実行者権限定義者の権利対は、」より多くの情報http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

を持っています

これが役に立ちます。

0
SQL> grant create any procedure to testdb; 

"testdb"ユーザーに対して作成権限を与えたいときに使用するコマンドです。あなたのDBAアカウントで

1

、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

になります、私は、これは非常に古い質問が、私を知っています私はそれをちょっと切ってもらいたいと思っています。

関連する問題