GRANT (データベース権限) ステートメント

この形式の GRANT ステートメントは、 データベース全体に適用される権限 (データベース内の 特定のオブジェクトに適用される特権ではなく) を付与します。

呼び出し

このステートメントはアプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行することができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ACCESSCTRL、CREATE_SECURE_OBJECT、DATAACCESS、DBADM、または SECADM 権限を付与するには、SECADM 権限が必要です。

注: Db2 11.5.7 以降では、CREATE_EXTERNAL_ROUTINE 権限を付与するには、SYSADM 権限が必要です。 DB2_ALTERNATE_AUTHZ_BEHAVIOUR レジストリー変数が設定されていて、値 EXTERNAL_ROUTINE_DBAUTH が含まれている場合は、SYSADM、SECADM、または ACCESSCTRL 権限が必要です。
また、Db2 11.5.7 以降では、CREATE_NOT_FENCED_ROUTINE 権限を付与するには SYSADM 権限が必要です。 DB2_ALTERNATE_AUTHZ_BEHAVIOUR レジストリー変数が設定されていて、値 NOT_FENCED_ROUTINE_DBAUTH が含まれている場合は、SYSADM、SECADM、または ACCESSCTRL 権限が必要です。

他の権限を付与するには、ACCESSCTRL または SECADM 権限が必要です。

構文

Read syntax diagramSkip visual syntax diagramGRANT,ACCESSCTRLBINDADDCONNECTCREATETABCREATE_EXTERNAL_ROUTINECREATE_NOT_FENCED_ROUTINECREATE_SECURE_OBJECTDATAACCESSDBADMWITH DATAACCESSWITHOUT DATAACCESSWITH ACCESSCTRLWITHOUT ACCESSCTRLEXPLAINIMPLICIT_SCHEMALOADQUIESCE_CONNECTSECADMSQLADMWLMADMON DATABASETO ,USERGROUPROLEauthorization-namePUBLIC

説明

ACCESSCTRL
アクセス制御権限を与えます。 ACCESSCTRL 権限の保有者は、以下の操作を実行できます。
  • 次の各データベース権限の付与および取り消し: BINDADD、 CONNECT、CREATETAB、CREATE_EXTERNAL_ROUTINE、 CREATE_NOT_FENCED_ROUTINE、EXPLAIN、 IMPLICIT_SCHEMA、LOAD、QUIESCE_CONNECT、SQLADM、WLMADM
  • すべてのオブジェクト・レベルの特権の付与および取り消し。
ACCESSCTRL 権限を PUBLIC に付与することはできません (SQLSTATE 42508)。
BINDADD
パッケージを作成する権限を付与します。 パッケージの作成者には自動的にそのパッケージに対する CONTROL 特権が与えられ、後で BINDADD 権限が取り消された場合でもその特権はそのまま保持されます。
CONNECT
データベースにアクセスする権限を与えます。
CREATETAB
基本表を作成する権限を付与します。 基本表の作成者には、自動的にその表に対する CONTROL 特権が与えられます。 後で CREATETAB 権限が取り消された場合でも、その特権は作成者に残されます。

ビューの作成に必要な明示的な権限はありません。 ビューの作成に使用するステートメントの許可 ID に 各ビューの基本表に対する CONTROL 特権または SELECT 特権のいずれかが与えられている場合には、 いつでもビューを作成できます。

CREATE_EXTERNAL_ROUTINE
外部ルーチンを登録する権限を付与します。 そのようにして登録されたルーチンが不利な副次作用を引き起こすことがないように注意してください。 (詳しくは、 CREATE PROCEDURE (external) ステートメントの THREADSAFE 節の説明を参照してください。)

登録された外部ルーチンは、後で CREATE_EXTERNAL_ROUTINE が取り消された場合でも、そのまま残されます。

CREATE_NOT_FENCED_ROUTINE
データベース・マネージャーの処理の中で実行するルーチンを登録する権限を与えます。 そのようにして登録されたルーチンが不利な副次作用を引き起こすことがないように注意してください。 (詳しくは、 CREATE PROCEDURE (external) ステートメントの FENCED 節の説明を参照してください。)

非 fenced として登録されたルーチンは、後で CREATE_NOT_FENCED_ROUTINE が取り消された場合でも、同じ方式で実行されます。

CREATE_NOT_FENCED_ROUTINE 権限を付与される authorization-name には、 自動的に CREATE_EXTERNAL_ROUTINE が付与されます。

CREATE_SECURE_OBJECT
セキュア・トリガーおよびセキュア関数を作成する権限を付与します。 そのようなオブジェクトのセキュア属性を変更する権限も付与します。
DATAACCESS
データにアクセスする権限を与えます。 DATAACCESS 権限の保有者は、以下の操作を実行できます。
  • データの選択、挿入、更新、削除、およびロード
  • パッケージの実行
  • ルーチン (監査ルーチンを除く) の実行
DATAACCESS 権限を PUBLIC に付与することはできません (SQLSTATE 42508)。
DBADM
データベース管理者権限を与えます。 データベース管理者は、データベース内のほとんどすべてのオブジェクトに対するほとんどすべての特権を保持します。 唯一の例外は、アクセス制御、データ・アクセス、およびセキュリティー管理者の各権限に含まれている特権です。 DBADM は、PUBLIC に付与することはできません。
EXPLAIN
ステートメントの Explain 情報の取り出しを行う権限を付与します。 EXPLAIN 権限の保有者は、データへアクセスすることなく、動的 SQL ステートメントと静的 SQL ステートメントの Explain 情報の取り出し、準備、および記述を行うことができます。
IMPLICIT_SCHEMA
スキーマを暗黙的に作成する権限を与えます。
LOAD
このデータベースでロードを実行する権限を付与します。 この権限を付与されたユーザーは、 このデータベースにおいて LOAD ユーティリティーを使用する権利を持ちます。 この権限は、デフォルトで DATAACCESS と DBADM にも付与されます。 ただし、LOAD 権限しか付与されていないユーザー (DATAACCESS 以外) の場合は、表レベルでの特権が別に必要になります。 LOAD 特権に加えて、ユーザーは以下の特権を付与されていなければなりません。
  • モード INSERT、TERMINATE (直前の LOAD INSERT を終了するため)、 または RESTART (直前の LOAD INSERT を再び開始するため) で LOAD を実行する場合は、 その表に対する INSERT 特権。
  • モード REPLACE、TERMINATE (直前の LOAD REPLACE を終了するため)、 または RESTART (直前の LOAD REPLACE を再び開始するため) で LOAD を実行する場合は、 その表に対する INSERT および DELETE 特権。
  • LOAD の一部として例外表を使用する場合は、その表に対する INSERT 特権。
QUIESCE_CONNECT
静止中のデータベースにアクセスする権限を与えます。
SECADM
セキュリティー管理者権限を与えます。 この権限の保有者は、以下の操作を実行できます。
  • セキュリティー・オブジェクト (監査ポリシー、 ロール、セキュリティー・ラベル、セキュリティー・ラベル・コンポーネント、セキュリティー・ポリシー、トラステッド・コンテキストなど) の作成とドロップ。
  • 権限、免除、特権、ロール、およびセキュリティー・ラベルの付与および取り消し。
  • SETSESSIONUSER 特権の付与および取り消し。
  • 他者が所有するオブジェクトに対する TRANSFER OWNERSHIP の実行
SECADM 権限を PUBLIC に付与することはできません (SQLSTATE 42508)。
SQLADM
SQL ステートメントの実行を管理する権限を付与します。 SQLADM 権限の保有者は、以下の操作を実行できます。
  • イベント・モニターの作成、ドロップ、フラッシュ、および設定
  • データへのアクセス不要の、動的 SQL ステートメントおよび静的 SQL ステートメントの Explain 情報の取り出し、準備、および記述
  • 最適化プロファイル・キャッシュのフラッシュ
  • パッケージ・キャッシュのフラッシュ
  • runstats ユーティリティーの実行
  • 使用量リストの作成、変更、ドロップ、および設定
WLMADM
ワークロードを管理する権限を付与します。 WLMADM 権限の保有者は、以下の操作を実行できます。
  • サービス・クラス、しきい値、作業アクション・セット、作業クラス・セット、またはワークロードの作成、ドロップ、および変更。
今後
権限を誰に与えるかを指定します。
ユーザー
authorization-name がユーザーであることを指定します。
GROUP
authorization-name がグループ名であることを指定します。
ROLE
authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
権限名
1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。

この許可 ID のリストに、このステートメントを発行するユーザーの許可 ID を含めることはできません (SQLSTATE 42502)。

PUBLIC
一連のユーザー (許可 ID) に権限を付与します。

ルール

  • 指定する各 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 であると見なされます。

  • ACCESSCTRL、CREATE_SECURE_OBJECT、DATAACCESS、DBADM、または SECADM 権限を特殊グループ PUBLIC に付与することはできません。 したがって、role-name が直接的または間接的に PUBLIC に与えられている場合には、ロール role-name への ACCESSCTRL、CREATE_SECURE_OBJECT、DBADM、DATAACCESS、または SECADM 権限の付与は失敗します (SQLSTATE 42508)。
    • 以下のステートメントが発行済みの場合、ロール role-name は PUBLIC に直接的に付与されます。
         GRANT ROLE role-name TO PUBLIC
    • 以下のステートメントが発行済みの場合、ロール role-name は間接的に PUBLIC に付与されます。
         GRANT ROLE role-name TO ROLE role-name2
         GRANT ROLE role-name2 TO PUBLIC
  • 代替構文: 以前のバージョンの Db2® および他のデータベース製品との互換性のために、以下がサポートされています。
    • CREATE_NOT_FENCED_ROUTINE の代わりに CREATE_NOT_FENCED を指定できます。
    • DATABASE の代わりに SYSTEM を指定できます。
  • グループに付与されている特権: グループに付与されている特権は、以下の許可チェックでは使用されません。
    • パッケージ内の静的 DML ステートメント
    • CREATE VIEW ステートメントの処理過程での基本表
    • マテリアライズ照会表の CREATE TABLE ステートメントの処理過程での基本表
    • SQL ルーチンの作成
    • トリガーの作成
  • データベース権限を付与するとき、WITH GRANT OPTION は無視されます。

  • 例 1: ユーザー WINKEN、BLINKEN、および NOD に、データベースに接続する権限を与えます。
       GRANT CONNECT ON DATABASE TO USER WINKEN, USER BLINKEN, USER NOD
  • 例 2: データベースに対する BINDADD 権限を D024 という名前のグループに与えます。 システムには、D024 というグループとユーザーの両方が存在します。
       GRANT BINDADD ON DATABASE TO GROUP D024
    GROUP キーワードの指定は必須であることに注意してください。 この指定がない場合、D024 という名前のユーザーとグループが両方とも存在しているのでエラーになります。 D024 グループのメンバーは、いずれもデータベースのパッケージをバインドできるようになります。 しかし、D024 というユーザーにそれは許されません (ただし、 このユーザーがグループ D024 のメンバーでもある場合、 または以前に BINDADD 権限を与えられていた場合、 または BINDADD 権限がユーザー D024 がメンバーとして属している別のグループに与えられていた場合を除きます)。
  • 例 3: ユーザー Walid にセキュリティー管理者権限を与えます。
       GRANT SECADM ON DATABASE TO USER Walid
  • 例 4: SECADM 権限を持つユーザーが、CREATE_SECURE_OBJECT 権限をユーザー Haytham に付与します。
       GRANT CREATE_SECURE_OBJECT ON DATABASE TO USER HAYTHAM