2016-06-13 3 views
0

プロシージャ内からユーザーにロールを付与したいとします。たとえば、私はjsmithとしてログインしており、SQLウィンドウから行くことができます:Oracleでは、プロシージャ内からユーザーにロールを付与します。

EXECUTE IMMEDIATE 'grant some_role to rjones'; 

これは正常に実行されます。

しかし、私は、このような手順で作成した場合:私は、私は次のエラーを取得する手順を実行すると

CREATE OR REPLACE PROCEDURE MY_ROLE_GRANTING_PROCEDURE 

IS 

BEGIN 

EXECUTE IMMEDIATE 'grant some_role to rjones'; 

END; 

ORA-01932: ADMIN option not granted for role 'some_role'

私が私の手順と同じにに付与する必要があるようですがユーザーjsmithとしての役割付与機能はありますが、その方法はわかりません。また、私はjsmithとしてプロシージャを作成したので、プロシージャに対する実行権限は問題ではありません。

答えて

2

デフォルトでは、Oracleのプロシージャは、定義者の権利を使用して作成されます。私はすべての細部を手にしているわけではありませんが、定義者の権利モードでは、プロシージャ所有者の権限でプロシージャが実行されます。プロシージャ所有者はプロシージャを実行するユーザーと同じでなくてもよく、プロシージャを作成/コンパイルしました。また、私はプロシージャ所有者の役割を無視すると信じています。プロシージャ所有者に直接付与された権限にのみアクセスできます。

あなたの場合は、呼び出し元の権利を使用してプロシージャをコンパイルすると思います。このモードでは、プロシージャは実行ユーザーの権限を使用しますが、その役割も考慮されます。

このモードを使用するには、あなただけの手続きの宣言にauthid current_userを追加する必要があります。あなたがプロシージャを実行することが可能な2つのモードをより良く、より完全な説明については

CREATE OR REPLACE PROCEDURE MY_ROLE_GRANTING_PROCEDURE authid current_user 

IS 

BEGIN 

EXECUTE IMMEDIATE 'grant some_role to rjones'; 

END; 

、顔をしていますここに:Managing Security for Definer's Rights and Invoker's Rights

私も、私が読み少し簡単に見つける次の記事へのリンクを追加します

EDIT:Invoker Rights Part 1

+0

これは私の問題を解決しました。ありがとう、sstan! – MrMike

関連する問題