2

データベースには、CREATE PROCEDURE 特権が付与されているユーザーがいます。しかし、そのユーザーが単純なプロシージャを作成しようとすると、次のエラーがスローされます。このエラーは、必要なオペレーティング システム権限なしでデータベースをインストールしようとした場合にも発生します。

プロシージャの DDL は次のとおりです。

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

これを機能させるには、他に何を検討する必要がありますか? 特権が付与されていても、管理者または ORA_DBA グループに属していない人はプロシージャを作成できないと思います。確信はないけど。

4

2 に答える 2

9

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

原則として、この特権はデータベースのセキュリティを回避するために簡単に使用される可能性があるため、軽く付与するべきではありません。

お役に立てば幸いです。

于 2012-05-05T12:11:44.143 に答える
-1

以下のいくつかのコメントの後、私は再試行しています。

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

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

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

別の角度から見ると、この方法は保守も簡単です。TOTALUSER現在のユーザーにデータを公開する方法で一種の API を提供し、将来変更される可能性のある実装の詳細を隠し、現在のユーザーには透過的です。

于 2012-05-05T17:01:30.650 に答える