GRANT (スキーマ特権) ステートメント
この形式の GRANT ステートメントは、スキーマに対する特権を付与します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- schema-name に対する指定された特権ごとに WITH GRANT OPTION
- schema-name に対するスキーマ ACCESSCTRL 権限
- ACCESSCTRL または SECADM 権限
例外:
- SYS で始まるスキーマ名に対する以下の特権を付与できるのは、ACCESSCTRL または SECADM のある許可 ID を持っている場合に限られます。
- SYS で始まるスキーマ名に対する SELECTIN 特権。例えば、SYSIBM、SYSCAT、SYSFUN、SYSSTAT、SYSPROC、SYSXML、SYSIBMADM、SYSIBMINTERNAL、SYSIBMTS。
- スキーマ SYSPUBLIC に対する特権 SELECTIN、CREATEIN、DROPIN。CREATEIN 特権を付与するとユーザーは公開の別名を作成でき、DROPIN 特権を付与するとユーザーは公開の別名をドロップできます。
- SYS で始まるスキーマ名に対する他の特権や権限は、どのユーザーも付与できません (SQLSTATE 42501)。
- スキーマの ACCESSCTRL 権限を付与できるのは、SECADM 権限またはデータベースの ACCESSCTRL 権限を持っているユーザーに限られます。
- PUBLIC に対しては、直接的にも間接的にもスキーマ権限 (SCHEMAADM、ACCESSCTRL、DATAACCESS、LOAD) を付与できません。
構文
説明
- ALL または ALL PRIVILEGES
- ON 節で指定されているスキーマに対するすべてのスキーマ特権を付与します。
ALL の指定がない場合、 特権のリストに示されているキーワードの 1 つまたは複数を指定する必要があります。
- ACCESSCTRL
- スキーマに対するアクセス制御権限を付与します。
スキーマ ACCESSCTRL 権限の保有者は、次のことが可能です。
- スキーマで定義されたオブジェクトでの、特権の付与および取り消し。
- スキーマ ACCESSCTRL 自体を除くすべてのスキーマ・レベルの特権の付与および取り消し。
- ALTERIN
- スキーマ内のすべてのオブジェクトの変更、またはコメント付けのための特権を与えます。 明示的にスキーマを作成した所有者は、ALTERIN 特権が自動的に与えられます。
- CREATEIN
- スキーマにオブジェクトを作成する特権を与えます。 オブジェクトの作成に必要なその他の権限または特権 (CREATETAB など) は、これを指定しても必要です。 明示的に作成されたスキーマの所有者には、自動的に CREATEIN 特権が付与されます。 暗黙的に作成されたスキーマの CREATEIN 特権は、PUBLIC に自動的に付与されます。
- DATAACCESS
- スキーマ内のデータにアクセスする権限を付与します。
DATAACCESS 権限の保有者は、以下の操作を実行できます。
- スキーマで定義された表またはビューでの、データの選択、挿入、更新、削除、およびロード
- スキーマに定義されているパッケージの実行
- スキーマに定義されている、監査ルーチン以外のいずれかのルーチンの実行
DATAACCESS 権限を PUBLIC に付与することはできません (SQLSTATE 42508)。
- DELETEIN
-
スキーマ内の表オブジェクトに含まれているデータを削除する特権を与えます。
- DROPIN
- スキーマ内のオブジェクトをドロップする特権を与えます。 明示的に作成されたスキーマの所有者は、DROPIN 特権を自動的に与えられます。
- EXECUTEIN
- スキーマで定義されるユーザー定義の関数、メソッド、プロシージャー、パッケージ、モジュールを (既存のものも今後定義されるものも) すべて実行する特権を付与します。
- INSERTIN
-
スキーマで定義される表やビュー (既存のものと今後定義されるもの) すべてに対して行を挿入したり IMPORT ユーティリティーを実行したりする特権を与えます。
- LOAD
- このスキーマでロードを実行する権限を付与します。この権限を付与されたユーザーは、このスキーマにおいて LOAD ユーティリティーを使用する権利を持ちます。この権限は、デフォルトで SCHEMAADM に付与されます。しかし、ユーザーにスキーマ LOAD 権限しかない (スキーマ DATAACCESS ではない) 場合、そのユーザーには表レベルの特権も必要です。
スキーマ LOAD 特権に加えて、ユーザーには以下のものが必要です。
- モード INSERT、TERMINATE (直前の LOAD INSERT を終了するため)、または RESTART (直前の LOAD INSERT を再開するため) で LOAD を実行する場合は、その表に対する INSERT 特権またはその表のスキーマに対する INSERTIN 特権。
- モード REPLACE、TERMINATE (直前の LOAD REPLACE を終了するため)、または RESTART (直前の LOAD REPLACE を再開するため) で LOAD を実行する場合は、その表に対する INSERT および DELETE 特権またはその表のスキーマに対する INSERTIN および DELETEIN 特権。
- LOAD の一部として例外表を使用する場合は、その例外表に対する INSERT 特権、またはその表のスキーマに対する INSERTIN 特権。
- SCHEMAADM
-
スキーマ管理者権限を与えます。スキーマ管理者は、スキーマ内のほとんどすべてのオブジェクトに対するほとんどすべての特権を保持します。唯一の例外は、アクセス制御、およびスキーマ・データ・アクセスの各権限に含まれている特権です。
SCHEMAADM 権限を PUBLIC に付与することはできません (SQLSTATE 42508)。
- SELECTIN
- スキーマで定義される表またはビュー (既存のものと将来定義されるものすべて) から選択する特権を付与します。
- UPDATEIN
- スキーマで定義される表または更新可能なビュー (既存のものと将来定義されるものすべて) に対して UPDATE ステートメントを使用するための特権を付与します。
- ON
-
- SCHEMA schema-name
- 権限を与える対象のスキーマの名前を指定します。SYS プレフィックスで開始するスキーマに対しては権限を付与できません (SQLSTATE 42501)。
- CURRENT SCHEMA
- DB2®® 特殊レジスター CURRENT SCHEMA によって示されるスキーマに対して権限が付与されることを指定します。SYS プレフィックスで開始するスキーマに対しては権限を付与できません (SQLSTATE 42501)。
- 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 に対し、特権を他のユーザーに与えることを許可します。
規則
- 指定したそれぞれの 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) を戻します。 どのような特権も与えられなかった場合は、エラーが戻されます (SQLSTATE 42501)。 (ステートメントの処理に使用されるパッケージが、 LANGLEVEL を SQL92E または MIA に設定してプリコンパイルされていた場合、付与者が GRANT 操作の対象に対して特権を持っていない場合以外は警告が戻されます (SQLSTATE 01007)。)
Notes®
- SYSPUBLIC に対する権限付与: 予約済みスキーマの SYSPUBLIC に対して特権を付与することができます。 CREATEIN 特権が付与されると公開の別名を作成でき、DROPIN 特権が付与されると公開の別名をドロップできます。 SELECTIN が付与されると、スキーマで定義された表から選択することができます。
- SCHEMAADM、スキーマ ACCESSCTRL、スキーマ DATAACCESS、またはスキーマ LOAD のどの権限も、特殊グループ PUBLIC に付与することはできません。
したがって、直接的であれ間接的であれ、role-name が PUBLIC に付与されている場合、スキーマ ACCESSCTRL、SCHEMAADM、スキーマ DATAACCESS、またはスキーマ LOAD の各権限を role-name に付与する操作は失敗します (SQLSTATE 42508)。
- 以下のステートメントが発行済みの場合、ロール role-name は PUBLIC に直接的に付与されます。
GRANT ROLE role-name TO PUBLIC - 以下のステートメントが発行済みの場合、ロール role-name は間接的に PUBLIC に付与されます。
GRANT ROLE role-name TO ROLE role-name2GRANT ROLE role-name2 TO PUBLIC
- 以下のステートメントが発行済みの場合、ロール role-name は PUBLIC に直接的に付与されます。
- グループに付与される特権: 以下の許可検査では、グループに付与される権限は使用されません。
- パッケージ内の静的 DML ステートメント
- CREATE VIEW ステートメントの処理過程での基本表
- マテリアライズ照会表の CREATE TABLE ステートメントの処理過程での基本表
- SQL ルーチンの作成
- トリガーの作成
- スキーマ権限 (SCHEMAADM、ACCESSCTRL、DATAACCESS、LOAD) を付与するとき、WITH GRANT OPTION は無視されます。
例
- 例 1: スキーマ CORPDATA にオブジェクトを作成する特権を、ユーザー JSINGLETON に与えます。
GRANT CREATEIN ON SCHEMA CORPDATA TO JSINGLETON - 例 2: スキーマ CORPDATA のオブジェクトを作成およびドロップする特権を、ユーザー IHAKES に与えます。
GRANT CREATEIN, DROPIN ON SCHEMA CORPDATA TO IHAKES
