SQLプロシージャ権限のルールと、それらがどのようにチェックされるのかを、以下に示します。
- 動的SQLと静的SQLは、これらのルールに準拠しています。
一般に、用語dynamic SQLは、実行時まで完全なテキストが判明しないすべてのSQL文を指します。
- SQLプロシージャのデフォルトの権限オプションはDEFINERです。
- プロシージャの作成者がその直接の所有者でもある場合は、プロシージャ内のすべての静的DML文とDCL文が有効です。
以下のテーブルに、SQLプロシージャ権限の割り当てルールを示します。
列見出しに関する以下の事柄に注意してください。
- Owner/Creator Relationship列に対しては、ownerという語は直接の所有者を表わします。
- Privilege Checking Done at This Time: Compilation列に関しては、コンパイル時には適切なCREATE権限とDROP権限もチェックされます。
- Privilege Checking Done at This Time: Execution列に対しては、EXECUTE PROCEDURE権限も実行時にチェックされます。
SQL SECURITY権限オプション | SQL文の状態(動的または静的) | 所有者/作成者の関係 | 次のときにチェックが行なわれる権限 | デフォルトのデータベースまたはユーザー | |
---|---|---|---|---|---|
コンパイル | 実行 | ||||
DEFINER | 動的 | OはCでない | なし | OおよびC | C |
OはCである | なし | O | C | ||
静的 | OはCでない | OおよびC | OおよびC | C | |
OはCである | O | O | C | ||
INVOKER | 動的 | OはCでない | なし | I | I |
OはCである | なし | I | I | ||
静的 | OはCでない | C | I | I | |
OはCである | C | I | I | ||
OWNER | 動的 | OはCでない | COP | O | O |
OはCである | なし | O | O | ||
静的 | OはCでない | COPおよびO | O | O | |
OはCである | O | O | O | ||
CREATOR | 動的 | OはCでない | なし | C | C |
OはCである | なし | C | C | ||
静的 | OはCでない | C | C | C | |
OはCである | C | C | C |
条件:
記号またはテキスト文字列 | CREATE PROCEDUREリクエストまたはREPLACE PROCEDUREリクエストを実行依頼するために必要なユーザー権限 |
---|---|
なし | なし |
エラー | CREATE PROCEDUREリクエストまたはREPLACE PROCEDUREリクエストのコンパイル時にはなかった1つまたは複数の権限。 この場合はリクエストがアボートされるので、Privilege Check at Execution Time (実行時の権限チェック)およびDefault Database (デフォルトのデータベース)のセルは空になります。 |
COP | CREATE OWNER PROCEDURE。 |
C | プロシージャの作成者の権限。 |
I | プロシージャを呼び出したユーザーの権限。 |
O | プロシージャの所有者の権限。 |
OおよびC | プロシージャ所有者およびプロシージャの作成者の権限。 |
OまたはC | プロシージャ所有者またはプロシージャの作成者の権限。 |
CREATOR | プロシージャが含むデータベースまたはユーザーかどうかに関係なく、プロシージャの作成者の権限。 |
DEFINER | 現在定義されている権限。 これは、デフォルトです。 |
INVOKER | 現在のスタックの最上位にある権限。 |
OWNER | プロシージャの直接の所有者 (プロシージャの格納先ユーザーまたはデータベース)の権限。 |
記号またはテキスト文字列 | プロシージャの直接の所有者と作成者の関係 |
---|---|
OはCでない | 異なる |
OはCである | 同じ |
INVOKER SQL SECURITYオプションのモデルとして最初の行を使用すると、テーブルは次のように解釈されます。SQL文が動的に呼び出され、それを含むプロシージャの直接の所有者がその作成者と同じユーザーではない場合、プロシージャのコンパイル時に権限チェックは実行されず、プロシージャの呼び出し側の権限は実行時にチェックされ、プロシージャ本体のSQL文内で修飾されていないすべてのオブジェクトの参照を暗黙的に修飾するために使用されるデフォルトのデータベースまたはユーザーは、そのプロシージャの呼び出し側です。
次の例は、さまざまなSQL SECURITYオプションを使用する方法を示しています。