4

Oracle 11ストアドプロシージャにGRANTステートメントを配置しようとすると、GRANTが予期しないシンボルであると報告されます。GRANTの前に何かを付ける必要がありますか、それともOracleはSP内でのGRANTSの実行を単に禁止していますか?

4

2 に答える 2

5

ストアドプロシージャ内でDDL(のように)使用することはお勧めできません。GRANT

これを行うには動的SQLEXECUTE IMMEDIATE)を使用する必要がありますが、正直なところ、ストアドプロシージャ内でこれを実行する理由がわかりません。

于 2011-03-22T16:05:46.383 に答える
2

これは、現在のユーザーが所有するすべてのテーブルに対するオブジェクト権限(SELECT、UPDATEなど)を別のユーザーに付与するPL / SQLストアドプロシージャです(例:「appuser」)。

CREATE OR REPLACE PROCEDURE grant_privs
IS
   CURSOR ut_cur IS SELECT table_name from user_tables;
   ut_rec ut_cur%rowtype;
BEGIN
   FOR ut_rec IN ut_cur
   LOOP
      EXECUTE IMMEDIATE 'GRANT ALL ON ' || ut_rec.table_name || ' TO appuser';
   END LOOP;
END;
/

これは、Webアプリケーションのデータベース変更をデプロイした後に自動的に実行されました。現在のユーザーがデータベーステーブルを所有しています。データベースの変更をデプロイした後、ストアドプロシージャを実行して、「appuser」がすべてのテーブルでSQLステートメントを実行できるようにしました。セキュリティ上の理由から、限られたシステム権限しか持たない「appuser」として接続されたWebアプリケーション。

これは、問題の解決策であると同時に、解決策の確かな使用例でもあります。

于 2013-01-21T17:31:37.880 に答える