GRANT (パッケージ特権) ステートメント

この形式の GRANT ステートメントは、パッケージに対する特権を付与します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • 参照されるパッケージに対する CONTROL 特権
  • package-name に対する指定された特権ごとに WITH GRANT OPTION
  • パッケージが含まれるスキーマに対するスキーマ ACCESSCTRL
  • ACCESSCTRL または SECADM 権限

CONTROL 特権を付与するためには、ACCESSCTRL または SECADM 権限、あるいはパッケージが含まれるスキーマに対するスキーマ ACCESSCTRL 権限が必要です。

構文

Read syntax diagramSkip visual syntax diagramGRANT,BINDCONTROLEXECUTE1ONPACKAGE2 package-name TO ,USERGROUPROLEauthorization-namePUBLIC WITH GRANT OPTION
Notes:
  • 1 RUN can be used as a synonym for EXECUTE.
  • 2 PROGRAM can be used as a synonym for PACKAGE.

説明

BIND
パッケージをバインドする特権を付与します。 BIND 特権を使用すると、ユーザーが BIND コマンドをパッケージに対して再発行したり、 REBIND コマンドを発行したりできます。 また、ユーザーが既存のパッケージの新しいバージョンを作成することもできます。

ユーザーには、BIND 特権に加えて、 プログラムに含まれている静的 DML ステートメントによって参照される表ごとに必要な特権が与えられていなければなりません。 これは、静的 DML ステートメントに対する許可がバインド時に検査されるので必要になります。

CONTROL
パッケージを再バインド、ドロップ、または実行するための特権、 およびパッケージ特権を他のユーザーに与える特権を付与します。 パッケージの作成者には、自動的にパッケージに対する CONTROL 特権が与えられます。 パッケージ所有者は、パッケージ・バインド・プログラムか、 またはバインド/プリコンパイル時に OWNER オプションを使って指定した ID です。

CONTROL 権限を付与される authorization-name には、 自動的に BIND と EXECUTE が付与されます。

CONTROL を持っていると、他のユーザーに上記の特権 (CONTROL を除く) を付与することができます。

EXECUTE
パッケージを実行する特権を与えます。
ON PACKAGE パッケージ名
特権の対象となるパッケージの名前を指定します。 パッケージ特権の付与は、そのパッケージのすべてのバージョン (つまり、 同一のパッケージ名とパッケージ・スキーマを共有するすべてのパッケージ) に適用されます。
今後
特権を誰に与えるかを指定します。
ユーザー
authorization-name がユーザーであることを指定します。
GROUP
authorization-name がグループ名であることを指定します。
ROLE
authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
権限名, ...
1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。

この許可 ID のリストに、このステートメントを発行するユーザーの許可 ID を含めることはできません (SQLSTATE 42502)。

PUBLIC
特権をユーザー (許可 ID) の集合に付与します。 詳細については、『権限、特権、およびオブジェクト所有権』を参照してください。
WITH GRANT OPTION
指定した authorization-name に対し、特権を他のユーザーに与えることを許可します。

指定した特権に CONTROL が含まれる場合、 WITH GRANT OPTION は CONTROL を除くすべての適用可能な特権に適用されます (SQLSTATE 01516)。

ルール

  • 指定したそれぞれの authorization-name に関して、USER、GROUP、ROLE のいずれも指定されていない場合には、次のようになります。
    • インスタンスに対して有効なセキュリティー・プラグインによって authorization-name の状況を判別できなければ、エラーが戻されます (SQLSTATE 56092)。
    • authorization-name がデータベースでは ROLE として定義され、有効なセキュリティー・プラグインでは GROUP または USER のいずれかとして定義されている場合には、エラーが戻されます (SQLSTATE 56092)。
    • 有効なセキュリティー・プラグインに従って authorization-name が USER と GROUP の両方として定義されている場合、エラーが戻されます (SQLSTATE 56092)。
    • authorization-name有効なセキュリティー・プラグインに従って USER のみとして定義されている場合、または未定義の場合は、USER が想定されます。
    • authorization-name が、 有効なセキュリティー・プラグインに従って GROUP としてのみ定義されている場合は、GROUP が想定されます。
    • authorization-nameデータベースで ROLE としてのみ定義されている場合には、ROLE であると見なされます。

  • パッケージ特権は、パッケージのすべてのバージョン (つまり、 同一のパッケージ ID とパッケージ・スキーマを共有するすべてのパッケージ) に適用されます。 アクセスを 1 つのバージョンだけに制約することはできません。 CONTROL 特権はパッケージのバインド・プログラムに暗黙的に付与されるので、 2 人のユーザーが 2 つのバージョンのパッケージをバインドすると、 両者とも互いのパッケージに対するアクセス権を暗黙的に付与されます。
  • グループに付与されている特権: グループに付与されている特権は、以下の許可チェックでは使用されません。
    • パッケージ内の静的 DML ステートメント
    • CREATE VIEW ステートメントの処理過程での基本表
    • マテリアライズ照会表の CREATE TABLE ステートメントの処理過程での基本表
    • SQL ルーチンの作成
    • トリガーの作成

  • 例 1: PACKAGE CORPDATA.PKGA に対する EXECUTE 特権を PUBLIC に与えます。
       GRANT EXECUTE
         ON PACKAGE CORPDATA.PKGA
         TO PUBLIC
  • 例 2: パッケージ CORPDATA.PKGA を EMPLOYEE という名前のユーザーに。 EMPLOYEE と呼ばれるグループもユーザーも存在していません。
       GRANT EXECUTE ON PACKAGE
         CORPDATA.PKGA TO EMPLOYEE
    または
       GRANT EXECUTE ON PACKAGE
         CORPDATA.PKGA TO USER EMPLOYEE