Oracle 11ストアドプロシージャにGRANTステートメントを配置しようとすると、GRANTが予期しないシンボルであると報告されます。GRANTの前に何かを付ける必要がありますか、それともOracleはSP内でのGRANTSの実行を単に禁止していますか?
5273 次
2 に答える
5
ストアドプロシージャ内でDDL
(のように)使用することはお勧めできません。GRANT
これを行うには動的SQL
(EXECUTE 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 に答える