定義者権限と実行者権限(AUTHID サブプログラムとロール権限の関係)

PL/SQL において定義者権限と実行者権限によりストアド・サブプログラム(プロシージャ、ファンクション)中でのロール権限の振る舞いは異なる。

  • 定義者権限(デフォルト)
    定義者権限サブプログラムでは、すべての ロール が使用禁止/無効 (※)となる。

※ 個々の SQL が直接実行可能でもストアド・サブプログラム化すると実行できないことがある。主な理由はロールによる権限が無効化されることを忘れているため(DBA ロールユーザだとよくやってしまう)。
実行ユーザーには個別に各種権限の付与を行っておく必要がある。

  • 実行者権限(AUTHID を使用)
    実行者権限サブプログラムでは、ロールは使用可能になる。

実行者権限の例

サンプル

CREATE PROCEDURE PROCEDURE_X ( param VARCHAR2 )
AUTHID CURRENT_USER      -- ← ここ
IS
BEGIN
      ・・・
END;
CREATE OR REPLACE PACKAGE PACKAGE_X
AUTHID CURRENT_USER      -- ← 指定はパッケージ単位
IS
       ・・・
END;

デフォルトの動作は、定義者権限での実行 ( AUTHID DEFINER )

実行者権限での実行はユーザー空間を切り替えるためパフォーマンスに影響する可能性がありそうである(未検証)。 実行者権限のプロシージャの場合、実行時に PL/SQL 実行エンジンによって毎回権限をチェックする(再帰 SQL が発生している?)。 一方、定義者権限サブプログラムはコンパイル時に権限チェック済にされているため、実行のたびに権限チェックが発生しないと書かれている。

また、使用頻度が高いストアド・サブプログラムは、頻繁に共有プールから追い出される事がないように、メモリ関連パラメータ、プロシージャのメモリへの定着化を考慮することも大事である。

 


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)