2012-05-05 10 views
1

データベースにCREATE PROCEDURE特権が付与されているユーザーがいます。 ORA-01031:権限が不十分です 01031. 00000 - "権限が不十分です" *原因:現在のユーザー名またはパスワードを適切な値で変更しようとしていません。 特権。また、このエラーは、 のシステム権限を必要とせずにデータベースをインストールしようとした場合にも発生します。ここORACLE - プロシージャを付与しましたが、プロシージャを作成できません

は、手続きのためのDDLです:

CREATE OR REPLACE PROCEDURE TOTALBASE.ROUNDUP 
      (CUR OUT SYS_REFCURSOR ) 
AS 
BEGIN 
    OPEN CUR FOR 
    SELECT * FROM TOTALBASE.ABONENT; 
END ROUNDUP; 

私はこの仕事をするために行うには他に何を考慮すべき?私は、管理者またはORA_DBAグループに属していない人には、特権が与えられてもプロシージャを作成できないと考えています。確信はないけど。

+0

この手順を作成しようとすると、あなたは 'totalbase'スキーマにいますか?これは、あなたが別のユーザーから 'totalbase'にオブジェクトを追加しようとしているように見えます... – Ben

+0

いいえ、私は別のスキーマに入っています。しかし、私はそのユーザーにPROCEDURE特権を与えることを許可しました。それで十分ではありませんか? –

+0

そのユーザーはまた、abonentテーブルに対してSELECT権限を持っていますか? – eaolson

答えて

7

独自のスキーマでプロシージャを作成するには、「CREATE ANY PROCEDURE」権限が必要です。

一般的に、この権限はデータベースセキュリティを回避するために簡単に使用できるため、軽く許可するべきではありません。

希望に役立ちます。

+0

私はその証言も認められたと信じていますが、私は同じ問題を抱えています。とにかくそれが助けにならなかったのを見た後、私はその特典を取り消した。 –

+0

次に、CREATE ANY PROCEDURE権限を再度付与して、 'alter session set sql_trace = true;を使用してもう一度試してみることをお勧めします。何が起こっているか見る –

-1

以下のコメントが少ないと、もう一度やり直しています。

別のスキーマでプロシージャを作成しないでください。各ユーザーが自分のスキーマ内にオブジェクトを作成できるようにします。

このようにして、GRANT他のスキーマオブジェクトへのアクセスの理由が少なくなります。 TOTALBASEユーザーは、そのプロシージャに対するEXECUTE特権を現在のユーザーに付与することができません。

TOTALUSERテーブルからのデータを必要とする現在のユーザーは、関数またはプロシージャのEXECUTE特権を持っている場合、他のオブジェクトを作成またはアクセスする必要はありません。

TOTALUSERは現在のユーザーにデータを公開する方法でAPIの種類を提供し、将来変更される可能性のある実装の詳細を隠して、現在のユーザーに透過的にします。

+0

-1。これは、質問とその下のコメントで説明されているように、OPがやろうとしていることの反対です。 – Ben

+0

彼がやろうとしていることは、99%以上のケースではOKではありません。彼は何を求めますか?=彼は何をする必要があります。これは、**付与するのは非常に危険です**。一般的なガイドラインとして、他のスキーマ(ANYキーワードを含む許可)の付与は避けてください。 SELECTを許可するような良性に見えるものであっても、読み取り専用であると考えると、予期しない結果が生じる可能性があります(select ...更新のため) – igr

+0

私はそれを理解しています。答えを編集して問題の解決策を含めると_why_の解明が間違っていて、代わりに何をしなければならないのか分かりません。答えはまたupvoteかもしれません。 @ Markの答えを見て、彼は質問に答えて、おそらくやってはいけないと言いました。あなたの答えは本当に助けにはなりません。 OPは、同じスキーマ内にプロシージャを作成できることを認識しています。 – Ben

関連する問題