GRANT (パッケージ特権) ステートメント
この形式の GRANT ステートメントは、パッケージに対する特権を付与します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- 参照されるパッケージに対する CONTROL 特権
- package-name に対する指定された特権ごとに WITH GRANT OPTION
- ACCESSCTRL または SECADM 権限
ACCESSCTRL または SECADM 権限は、CONTROL 特権を付与するために必要です。
構文
.-,---------------. V | (2) >>-GRANT----+-BIND--------+-+--ON--PACKAGE------package-name----> +-CONTROL-----+ | (1) | '-EXECUTE-----' .-,---------------------------------. V | >--TO----+-+-------+--authorization-name-+-+--------------------> | +-USER--+ | | +-GROUP-+ | | '-ROLE--' | '-PUBLIC------------------------' >--+-------------------+--------------------------------------->< '-WITH GRANT OPTION-'
注:
- EXECUTE の同義語として RUN を使用できます。
- PACKAGE の同義語として PROGRAM を使用できます。
説明
- BIND
- パッケージをバインドする特権を付与します。
BIND 特権を使用すると、ユーザーが BIND コマンドをパッケージに対して再発行したり、
REBIND コマンドを発行したりできます。
また、ユーザーが既存のパッケージの新しいバージョンを作成することもできます。
ユーザーには、BIND 特権に加えて、 プログラムに含まれている静的 DML ステートメントによって参照される表ごとに必要な特権が与えられていなければなりません。 これは、静的 DML ステートメントに対する許可がバインド時に検査されるので必要になります。
- CONTROL
- パッケージを再バインド、ドロップ、または実行するための特権、
およびパッケージ特権を他のユーザーに与える特権を付与します。
パッケージの作成者には、自動的にパッケージに対する CONTROL 特権が与えられます。
パッケージ所有者は、パッケージ・バインド・プログラムか、
またはバインド/プリコンパイル時に OWNER オプションを使って指定した ID です。
CONTROL 権限を付与される authorization-name には、 自動的に BIND と EXECUTE が付与されます。
CONTROL を持っていると、他のユーザーに上記の特権 (CONTROL を除く) を付与することができます。
- EXECUTE
- パッケージを実行する特権を与えます。
- ON PACKAGE package-name
- 特権の対象となるパッケージの名前を指定します。 パッケージ特権の付与は、そのパッケージのすべてのバージョン (つまり、 同一のパッケージ名とパッケージ・スキーマを共有するすべてのパッケージ) に適用されます。
- TO
- 特権を誰に与えるかを指定します。
- USER
- authorization-name がユーザーであることを指定します。
- GROUP
- authorization-name がグループ名であることを指定します。
- ROLE
- authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
- authorization-name,...
- 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 に対する EXECUTE 権限を EMPLOYEE という名前のユーザーに与えます。
EMPLOYEE と呼ばれるグループもユーザーも存在していません。
またはGRANT EXECUTE ON PACKAGE CORPDATA.PKGA TO EMPLOYEEGRANT EXECUTE ON PACKAGE CORPDATA.PKGA TO USER EMPLOYEE
