GRANT (ルーチン特権) ステートメント
この形式の GRANT ステートメントは、モジュール内で定義されていないルーチン (関数、メソッド、またはプロシージャー) に対する特権を付与します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- ルーチンに対する EXECUTE の WITH GRANT OPTION
- ルーチンが含まれるスキーマに対する ACCESSCTRL 権限
- ACCESSCTRL または SECADM 権限
特定のスキーマ中または特定のタイプのすべてのルーチン EXECUTE 特権を付与するには、
ステートメントの許可 ID によって保持されている特権に少なくとも以下のいずれかの特権が含まれていなければなりません。
- 指定されたスキーマ中の (指定されたタイプの)、 すべての既存のルーチンと将来作成するルーチンに対する EXECUTE の WITH GRANT OPTION
- すべてのルーチンが含まれるスキーマに対する ACCESSCTRL 権限
- ACCESSCTRL または SECADM 権限
SECADM 権限は、監査ルーチンと SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY プロシージャーに対して EXECUTE 特権を付与するために必要です。 これらのルーチンに関して、EXECUTE 特権を WITH GRANT OPTION 付きで付与することはできません (SQLSTATE 42501)。 EXECUTE 特権を、SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY プロシージャーの PUBLIC に付与することはできません (SQLSTATE 42501)。
構文
説明
- EXECUTE
- 識別されたユーザー定義の関数、メソッド、またはプロシージャーを実行する特権を付与します。 関数指定子 (function-designator)
- 特権を付与する関数を一意的に識別します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
- FUNCTION スキーマ.*
- スキーマ中のすべての関数を識別します。 将来作成される予定の関数も含まれます。 動的 SQL ステートメント中でスキーマが指定されていない場合は、 CURRENT SCHEMA 特殊レジスター中のスキーマが使用されます。 静的 SQL ステートメント中でスキーマが指定されていない場合は、 QUALIFIER プリコンパイル/BIND オプション中のスキーマが使用されます。 メソッド指定子 (method-designator)
- 特権を付与するメソッドを一意的に識別します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
- METHOD *
- タイプ type-name のすべてのメソッドを識別します。
将来作成される予定のメソッドも含まれます。
- FOR タイプ名
- 指定されたメソッドを検索する際のタイプを指定します。 ここで指定される名前は、 カタログに既に記述されているタイプを示すものでなければなりません (SQLSTATE 42704)。 動的 SQL ステートメントでは、 CURRENT SCHEMA 特殊レジスターの値が、修飾子のないタイプ名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイル/BIND オプションによって、 修飾子のないタイプ名に修飾子が暗黙指定されます。 type-name の代わりにアスタリスク (*) を使用して、 スキーマ中のすべてのタイプを識別することもできます。 これには将来作成される予定のタイプも含まれます。
プロシージャー指定子 (procedure-designator) - 一意的に識別 特権が付与されている 手順 。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
- PROCEDURE スキーマ.*
- スキーマ中のすべてのプロシージャーを識別します。 将来作成される予定のプロシージャーも含まれます。 動的 SQL ステートメント中でスキーマが指定されていない場合は、 CURRENT SCHEMA 特殊レジスター中のスキーマが使用されます。 静的 SQL ステートメント中でスキーマが指定されていない場合は、 QUALIFIER プリコンパイル/BIND オプション中のスキーマが使用されます。
- 今後
- EXECUTE 特権を誰に付与するかを指定します。
- ユーザー
- authorization-name がユーザーであることを指定します。
- GROUP
- authorization-name がグループ名であることを指定します。
- ROLE
- authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
- 1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。
- PUBLIC
- 一連のユーザー (許可 ID) に EXECUTE 特権を付与します。
- WITH GRANT OPTION
- 指定した authorization-name に対し、EXECUTE 特権を他のユーザーに与えることを許可します。WITH GRANT OPTION を省略すると、 指定した authorization-name は以下のいずれかの場合にのみ、 EXECUTE 特権を他のユーザーに与えることができます。
- SYSADM または DBADM 権限を持っている。
- 他のソースから EXECUTE 特権を与える許可を受けた。
ルール
- スキーマ 'SYSIBM' または 'SYSFUN' を使って定義された 関数やメソッドに対する EXECUTE 特権を付与することはできません (SQLSTATE 42832)。
- 指定したそれぞれの 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 であると見なされます。
- 一般に、GRANT ステートメントはステートメントの許可 ID が与えることを許されている特権の GRANT のみを処理し、 1 つ以上の特権が与えられなかった場合は警告 (SQLSTATE 01007) を戻します。 ステートメントの処理に使用されるパッケージが、 LANGLEVEL を SQL92E または MIA に設定してプリコンパイルされていた場合、 特権が付与されない場合には、 警告が戻されます (SQLSTATE 01007)。 付与者が GRANT 操作の対象に対して特権を持っていない場合、 エラーが戻されます (SQLSTATE 42501)。
注
- モジュール内で定義されているルーチンに関する特権は、GRANT (モジュール特権) ステートメントを使用してモジュール・レベルで付与されます。 モジュールに対する EXECUTE 特権を使用すると、モジュール内のすべてのオブジェクトにアクセスできます。
- グループに付与されている特権: グループに付与されている特権は、以下の許可チェックでは使用されません。
- パッケージ内の静的 DML ステートメント
- CREATE VIEW ステートメントの処理過程での基本表
- マテリアライズ照会表の CREATE TABLE ステートメントの処理過程での基本表
- SQL ルーチンの作成
- トリガーの作成
例
- 例 1:
関数 CALC_SALARY に対する EXECUTE 特権をユーザー JONES に与えます。 スキーマ中に CALC_SALARY という名前の関数が 1 つだけ含まれていると想定しています。
GRANT EXECUTE ON FUNCTION CALC_SALARY TO JONES
- 例 2: プロシージャー VACATION_ACCR に対する EXECUTE 特権を、
現行サーバー上のすべてのユーザーに与えます。
GRANT EXECUTE ON PROCEDURE VACATION_ACCR TO PUBLIC
- 例 3: 関数 DEPT_TOTALS に対する EXECUTE 特権を管理部門のアシスタントに与え、
この関数に対する EXECUTE 特権を他者に付与する特権をこのアシスタントに与えます。 この関数には DEPT85_TOT という特定の名前があります。 スキーマに DEPT_TOTALS という名前の関数が複数あることを想定しています。
GRANT EXECUTE ON SPECIFIC FUNCTION DEPT85_TOT TO ADMIN_A WITH GRANT OPTION
- 例 4: 関数 NEW_DEPT_HIRES に対する EXECUTE 特権を HR (Human Resources) に与えます。 この関数には、2 つの入力パラメーターがあり、
それぞれのパラメーターのタイプは INTEGER および CHAR(10) です。 スキーマに NEW_DEPT_HIRES という名前の関数が複数あることを想定しています。
GRANT EXECUTE ON FUNCTION NEW_DEPT_HIRES (INTEGER, CHAR(10)) TO HR
- 例 5: タイプ EMPLOYEE のメソッド SET_SALARY に対する EXECUTE 特権をユーザー JONES に付与します。
GRANT EXECUTE ON METHOD SET_SALARY FOR EMPLOYEE TO JONES