動的 SQL における DYNAMICRULES BIND オプションの影響
PRECOMPILE コマンドと BIND コマンドの DYNAMICRULES パラメーターによって、実行時に動的 SQL に適用される規則が決まります。
特に DYNAMICRULES パラメーターにより、以下の動的 SQL 属性に対して、実行時に適用される値が決まります。
- 許可検査中に使用される許可 ID。
- 非修飾オブジェクトの修飾に使用される修飾子。
- GRANT、REVOKE、ALTER、CREATE、DROP、COMMENT ON、RENAME、SET INTEGRITY および SET EVENT MONITOR STATE ステートメントを動的に準備するためにパッケージを使用できるかどうか。
DYNAMICRULES 値に加えてパッケージのランタイム環境が、動的 SQL ステートメントが実行時にどのように振る舞うかを制御します。 次の 2 つのランタイム環境が考えられます。
- パッケージはスタンドアロン・プログラムの一部として実行される。
- パッケージはルーチン・コンテキスト内で実行される。
DYNAMICRULES 値とランタイム環境の組み合わせで動的 SQL 属性の値が決まります。 その属性値の集合が、動的 SQL ステートメントの振る舞いと呼ばれます。 次のような 4 つの振る舞いがあります。
- 実行動作
- Db2® は、動的 SQL ステートメントの許可検査に使用される値、および動的 SQL ステートメント内の非修飾オブジェクト参照の暗黙修飾に使用される初期値として、パッケージを実行するユーザーの許可 ID ( Db2 データベースに最初に接続した ID) を使用します。
- バインド動作
- 実行時に Db2 では、 静的 SQL に対して適用されるすべての規則が許可と修飾に対して適用されます。 つまり、 パッケージ所有者の許可 ID を動的 SQL ステートメントの許可検査で使用される値とし、 動的 SQL ステートメント内の非修飾オブジェクト参照の暗黙修飾に使用されるパ ッケージ・デフォルト修飾子にするということです。
- 定義動作
- 定義動作が適用されるのは、 ルーチン・コンテキストで実行されるパッケージ内に動的 SQL ステートメントがあって、 しかもそのパッケージが DYNAMICRULES DEFINEBIND または DYNAMICRULES DEFINERUN でバインドされていた場合のみです。 DB2 は、(ルーチンのパッケージ・バインド・プログラムではなく) ルーチンの定義者の許可 ID を、動的 SQL ステートメントの許可検査で使用される値として使用し、そのルーチンの中で動的 SQL ステートメント内の非修飾オブジェクト参照の暗黙修飾の値として使用します。
- 呼び出し時の振る舞い
- 起動動作が適用されるのは、
ルーチン・コンテキストで実行されるパッケージ内に動的 SQL ステートメントがあって、
しかもそのパッケージが DYNAMICRULES INVOKEBIND または DYNAMICRULES INVOKERUN でバインドされていた場合のみです。 DB2 は、
ルーチンが呼び出されたときに有効であった現行ステートメント許可 ID を、
動的 SQL の許可検査で使用される値として使用し、
そのルーチン内の動的 SQL 内で非修飾オブジェクト参照の暗黙修飾として使用します。 これらのことを次の表にまとめます。
起動環境 使用 ID 任意の静的 SQL ルーチンを呼び出した SQL の入っているパッケージの OWNER の暗黙または明示的な値。 ビューまたはトリガー定義で使用 ビューまたはトリガーの定義者。 実行動作パッケージの動的 SQL Db2 データベースへの初期接続を行うために使用された ID。 定義動作パッケージの動的 SQL ルーチンを呼び出した SQL の入っているパッケージを使用しているルーチンの定義者。 起動動作パッケージの動的 SQL ルーチンを呼び出す現行許可 ID。
次の表は、それぞれの動的 SQL 振る舞いを決定する DYNAMICRULES 値とランタイム環境の組み合わせを示します。
DYNAMICRULES 値 | スタンドアロン・プログラム環境における動的 SQL ステートメントの振る舞い | ルーチン環境における動的 SQL ステートメントの振る舞い |
---|---|---|
BIND | バインド動作 | バインド動作 |
実行 | 実行動作 | 実行動作 |
DEFINEBIND | バインド動作 | 定義動作 |
DEFINERUN | 実行動作 | 定義動作 |
INVOKEBIND | バインド動作 | 呼び出し時の振る舞い |
INVOKERUN | 実行動作 | 呼び出し時の振る舞い |
次の表に、動的 SQL 振る舞いの各タイプ用の動的 SQL 属性値を示します。
動的 SQL 属性 | バインド振る舞いの動的 SQL 属性の設定 | 実行振る舞いの動的 SQL 属性の設定 | 定義振る舞いの動的 SQL 属性の設定 | 起動動作の動的 SQL 属性の設定 |
---|---|---|---|---|
許可 ID | BIND OWNER コマンド・パラメーターの暗黙または明示的な値 | パッケージを実行するユーザーの ID | ルーチン定義者 (ルーチンのパッケージ所有者ではない) | ルーチンが呼び出されたときの現行ステートメント許可 ID |
非修飾オブジェクトのデフォルト修飾子 | BIND QUALIFIER コマンド・パラメーターの暗黙または明示的な値 | CURRENT SCHEMA 特殊レジスター | ルーチン定義者 (ルーチンのパッケージ所有者ではない) | ルーチンが呼び出されたときの現行ステートメント許可 ID |
GRANT、 REVOKE、 ALTER、 CREATE、 DROP、 COMMENT ON、 RENAME、 SET INTEGRITY、および SET EVENT MONITOR STATE の実行 | いいえ | はい | いいえ | いいえ |