管理ユーザーが所有するプロシージャで動的DDLを実行します。私は、このプロシージャを定義者権限を持つ技術的な操作ユーザー(操作ユーザーにはcreate tableロールがない)で実行したいと考えています。定義済みのロール権限を使用してPL/SQLプロシージャで動的DDLを実行します。
問題は、ロールを使用してadminユーザーに「create table」権限が与えられていることです。このロールでは、名前付きpl/sqlブロックでカウントされないようにDDLを実行できません。
create or replace
PROCEDURE test_permissions AUTHID DEFINER AS
v_query_string VARCHAR2(400 CHAR) := 'CREATE TABLE TEST(abcd VARCHAR2(200 CHAR))';
BEGIN
EXECUTE IMMEDIATE v_query_string;
END;
私が試したもの:
- がPROCにAUTHID CURRENT_USERとAUTHID DEFINERに設定関数からプロシージャを実行無名ブロックを置く
- (機能を期待しては何とか定義をカスケード接続します)
私がAUTHIDをCURRENT_USERに設定した場合、私はprocを実行することができますadminユーザーと正しく編集してください。
管理者ユーザーにCREATE TABLEを直接許可しないでこれを回避する方法はありますか?
管理者のスキーマ内でそれを行うプロシージャ/ファンクションを作成し、そのプロシージャ/ファンクションに対して、実行しているユーザーに実行を許可することはできません。こうすることで、クエリを開いたままにして、何かが渡されたときにすぐに実行できるようにする場合は、分離+制限注入を実現できます。 – g00dy
これは実際に私がやろうとしていることですが、管理者はロールを介してのみテーブルを作成するための直接的な権限を持っていません。これは、たとえそれが管理ユーザ自身によって実行されたとしても、定義された権利を持つ手続きを実行することを不可能にするようである。 – JochenDB
adminユーザーにCREATE TABLEを許可しないのはなぜですか? – APC