REVOKE ステートメント

REVOKE ステートメントは、許可 ID から特権を取り消します。

以下の特権クラスごとに、別個の形式のステートメントが存在します。

このステートメントを適用することができるのは、常に、 現行サーバーにあるオブジェクトです。

呼びかけ REVOKE

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 これは、DYNAMICRULES RUN動作が有効になっている場合にのみ、動的に準備できる実行可能なステートメントです。 詳細は、「Authorization IDs and dynamic SQL」 を参照してください。

Db2 サブシステムをインストールした際に認証メカニズムが有効化されていなかった場合、エラー状態が発生します。

承認 REVOKE

BY 文節を指定しない場合には、ステートメントの許可 ID は、ここで定義する特権セットを使用して、 FROM 文節で指名するすべての許可名 (PUBLIC を指定した場合 はこれも含む) に対して、指定する特権のうち少なくとも 1 つを付与して いなければなりません。 BY 節が指定されている場合、そのステートメントの認証 ID は、SECADM または ACCESSCTRL の権限を持っている必要があります

注: インストールパラメータ「SEPARATE SECURITY」がNOの場合、SYSADM権限にはSECADM権限が暗黙的に含まれ、SYSCTRL権限にはACCESSCTRL権限が暗黙的に含まれます。
BY 節を指定し、特権セットに ACCESSCTRL が含まれている場合、以下を除くすべての特権および権限を取り消すことができます。
  • システム DBADM
  • ACCESSCTRL
  • DATAACCESS
  • CREATE_SECURE_OBJECT 特権

BY 文節を使用するか、または BY 文節を使用せずに CREATE_SECURE_OBJECT 特権を取り消すには、特権セットに SECADM 権限が含まれている必要があります。

アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、プランまたはパッケージの所有者が持つ特権となります。 所有者がロールの場合があります。 このステートメントが動的に準備される場合、特権セットは、 プロセスの SQL 許可 ID が持つ特権となります。 ただし、ROLE AS OBJECT OWNER AND QUALIFIER 節で定義されているトラステッド・コンテキスト内でプロセスが実行されている場合、特権セットは、有効なロールが持つ特権です。

構文 REVOKE

構文図を読むビジュアルシンタックスダイアグラムをスキップする REVOKE 許可指定 FROM ,authorization-nameROLErole-namePUBLIC BY,authorization-nameROLErole-nameALLINCLUDING DEPENDENT PRIVILEGESNOT INCLUDING DEPENDENT PRIVILEGESRESTRICT1
注:
  • 1 RESTRICT句は、REVOKE文のフォームで許可されている場合のみデフォルトとなります。

説明の対象: REVOKE

承認仕様
特権のクラスに対して 1 つ以上の特権を指定します。 同じ特権を複数回指定してはいけません。
FROM
どの許可 ID から特権を取り消すのかを指定します。
authorization-name,...
1 つ以上の許可 ID をリスト表示します。 同じ許可 ID を複数回使用しないでください。 authorization-name を小文字で指定する場合は、二重引用符で区切る必要があります。
CURRENT RULES の値により、REVOKE ステートメントそれ 自体の ID を (自分自身から特権を取り消すために) 使用する ことができるかどうかが決定されます。 CURRENT RULES の値と使用の可否は以下のとおりです。
  Db2
REVOKE ステートメントの ID を使用できません。
STD
REVOKE ステートメントの ID を使用できます。
ROLE role-name
1 つ以上のロールをリストします。 同じロールを複数回指定しないでください。
PUBLIC
PUBLIC に対する特権の付与を取り消します。
BY
特権の付与者をリストし、指定した各特権を指名したいずれかの ユーザーにここで指名した付与者の 1 人が明示して付与している場合に、 その特権を取り消します。 BY を使えるのは、SYSADM 権限あるいは SYSCTRL 権限を持つ許可 ID またはロールだけです。 このことは、BY 文節において自分自身の許可 ID やロール名しか指定しない場合にも当てはまります。
authorization-name,…
指定した特権の付与者であったユーザーの許可 ID を 1 つ以上リストします。 同じ許可 ID を複数回使わないでください。 ここにリストした付与者はそれぞれ、指定した特権を 指定したユーザーまたはロールのすべてに明示的に付与していなければなりません。
ROLE role-name
指定した特権の付与者であったロールを 1 つ以上リストします。 同じロールを複数回指定しないでください。 ここにリストした付与者はそれぞれ、指定した特権を指定したユーザーまたはロールのすべてに明示的に付与していなければ なりません。
すべて
指定した各特権を明示して付与されている指名したユーザー全員から、 その特権を取り消します。だれが特権を付与したのかは関係ありません。
INCLUDING DEPENDENT PRIVILEGES または NOT INCLUDING DEPENDENT PRIVILEGES
許可 ID またはロールから特権または権限を取り消すと、そのユーザーによって行われた付与も取り消されるかどうかを指定します。 デフォルト値は、取り消されている権限、および REVOKE_DEP_PRIVILEGES システム・パラメーターに基づきます。
  • ACCESSCTRL、DATAACCESS、またはシステムDBADM権限が取り消された場合、 NOT INCLUDING DEPENDENT PRIVILEGES 想定され、REVOKE文に句を指定する必要があります。
  • システムパラメータ REVOKE_DEP_PRIVILEGES が NO に設定されている場合、 NOT INCLUDING DEPENDENT PRIVILEGES と見なされ、ステートメントに含まれる場合はエラーが返されます。 INCLUDING DEPENDENT PRIVILEGES
  • そうでなければ、 INCLUDING DEPENDENT PRIVILEGES と見なされ、REVOKE文でその節を指定する必要があります。
INCLUDING DEPENDENT PRIVILEGES
許可 ID またはロールから特権または権限を取り消すと、従属する特権も取り消されます。 これは、チェーン内のすべての付与が取り消されるまで、そのユーザーによって行われた付与の取り消しが続行されることを意味します。

INCLUDING DEPENDENT PRIVILEGES システムパラメータ REVOKE_DEP_PRIVILEGES が NO に設定されている場合、従属特権を含めないように強制されるため、指定できません。

NOT INCLUDING DEPENDENT PRIVILEGES
許可 ID またはロールから特権または権限を取り消しても、そのユーザーによって行われた付与は取り消されないことを指定します。 ただし、取り消された特権について、取り消された特権のすべての影響が適用されます。 例えば、あるパッケージを正常にバインドするために取り消された特権が必要な場合、パッケージ所有者がこれらの特権を失った結果として、そのパッケージは無効のままになります。 オブジェクトの作成に使用された特権が取り消された場合、そのオブジェクトがドロップされる可能性があります。

NOT INCLUDING DEPENDENT PRIVILEGES ACCESSCTRL、DATAACCESS、またはシステムDBADM権限が取り消される際に指定する必要があります。

NOT INCLUDING DEPENDENT PRIVILEGES システムパラメータ REVOKE_DEP_PRIVILEGES が設定されている場合、 toYES, を指定することはできません。このパラメータは、削除時に依存特権を含める動作を強制します。

RESTRICT
ある条件が適用されるときに、指名された特権が取り消されないようにします。 RESTRICT は、それを許可する形式の REVOKE ステートメントの場合のみ、デフォルトです。 これらのフォームは、個別の種類の使用権限、ユーザー定義関数およびストアドプロシージャの実行権限、シーケンスの使用権限、および変数の読み取り権限または書き込み権限を無効にしています。

注釈 REVOKE

以下の事項は、すべてのREVOKE文の形式に適用されます

取り消された特権
許可 ID またはロールから取り消される特権は、ステートメント内で識別され、付与者によってユーザーに付与された特権です。 従属特権の剥奪の結果として、その他の特権も剥奪されることがあります。 Db2 の特権についての詳細は、 特権と権限を参照してください。
取り消された従属特権
ユーザーから特権を取り消すと、その特権が他のユーザーから取り消されることもあります。 これは、以前はカスケード取り消しと呼ばれました。 権限IDまたはロールから権限を取り消す場合、 Db2 は、取り消し対象の権限IDまたはロールと同じ権限付与者が付与した権限をすべて探し出し、取り消します。 U1 が U2 から特権 P を 取り消したときに、U3 から特権 P' が取り消されるためには、以下の規則が 真でなければなりません。
  • P と P' が同じ特権である。
  • U2 が U3 に特権 P' を付与している。
  • U1 が U2 に特権 P を付与する前に、だれもその特権を付与していない。
  • U2 はインストール・システムの SYSADM 権限を持っていない。

この規則は、CREATE VIEW ステートメントの結果としての特権の 暗黙的付与にも適用されます。

従属特権の取り消しは、以下の条件下では発生しません。

  • REVOKE文が実行された際に、現在のSYSADM権限を持つユーザーによって特権が付与されました。
  • 特権が、特殊タイプに対する USAGE 特権であり、かつ取り消し対象が以下の項目のいずれかを所有している。
    • 特殊タイプを使用するユーザー定義関数またはストアード・プロシージャー
    • 特殊タイプを使用する列が含まれている表
    • データ・タイプが特殊タイプであるシーケンス
  • 特権が、シーケンスに対する USAGE 特権であり、かつ取り消し対象が以下の項目のいずれかを所有している。
    • そのシーケンスを指定する NEXT VALUE 式または PREVIOUS VALUE 式を使用するトリガー
    • そのシーケンスを指定する NEXT VALUE 式または PREVIOUS VALUE 式を関数本体で使用するインライン SQL 関数
  • 特権がユーザー定義関数に対する EXECUTE 特権であり、かつ取り消し対象が以下の項目のいずれかを所有している。
    • その関数をソースとするユーザー定義関数
    • 関数を使用するビュー
    • 関数を使用するトリガー・パッケージ
    • チェック制約またはユーザー定義のデフォルトのタイプで関数を使用する表
  • 特権はストアドプロシージャの実行権限であり、取り消しはこれらの項目のいずれかを所有しています
    • CALL ステートメントでストアード・プロシージャーを参照するトリガー・パッケージ
  • ACCESSCTRL 管理権限がユーザーから取り消される場合、この ACCESSCTRL ユーザーによって行われた付与は取り消されません。

    このユーザーが自身による付与を取り消すと、それらの取り消しに続いて従属する特権が取り消されます。ただし、システム・パラメーター REVOKE_DEP_PRIVILEGES の使用または REVOKE_DEP_PRIVILEGES が SQLSTMT に設定されている場合に REVOKE を使用することにより、従属する特権を含めない動作が指定されている場合は除きます。

  • SECADM がユーザーから取り消される場合、この SECADM ユーザーによって行われた付与は取り消されません。

    このユーザーが自身による付与を取り消すと、それらの取り消しに続いて従属する特権が取り消されます。ただし、システム・パラメーター REVOKE_DEP_PRIVILEGES の使用または REVOKE_DEP_PRIVILEGES が SQLSTMT に設定されている場合に REVOKE を使用することにより、従属する特権を含めない動作が指定されている場合は除きます。

  • オプションが指定された場合、 NOT INCLUDING DEPENDENT PRIVILEGES オプションが指定された場合、このユーザが与えた権限は取り消されません。

以下の図の例を参考にしてください。

  1. BOB が WADE に SYSADM 権限を付与するものとします。 この後で、CLAIRE は、WADE に表に対する SELECT 特権を WITH GRANT OPTION 付き で付与します。
    図の説明の開始 ボックスを結ぶ矢印は、その前の文で説明されているイベントを表しています。 図の説明の終わり。
  2. WADE は、JOHN に同じ表に対する SELECT 特権を付与します。
    図の説明の開始 ボックスを結ぶ矢印は、その前の文で説明されているイベントを表しています。 図の説明の終わり。
  3. CLAIRE が WADE から表に対する SELECT 特権を取り消すと、その表に 対する SELECT 特権が JOHN からも取り消されます。
    図の説明の開始 ボックスを結ぶ矢印は、その前の文で説明されているイベントを表しています。 図の説明の終わり。

WADE は、CLAIRE が SELECT 特権を付与する前に、他のどのソースからも SELECT 特権を付与されていないので、WADE から JOHN への付与は除去されます。 BOB が WADE に付与した SYSADM 権限は、カスケード取り消しには影響しません。 SYSADMとSYSADM権限のインストールについての詳細は、「管理権限の管理」 を参照してください。 カスケード型取り消しの別の例については、「REVOKE文による特権の取り消し 」を参照してください。

ビューまたはマテリアライズ照会表の作成に使用された SELECT 特権を取り消すと、そのビューがドロップされます。ただし、ビューが作成される前に、そのビューの所有者が直接 SELECT 特権を別のソースから付与されている場合は別です。 ビューの作成に必要であった SYSADM 特権を取り消すと、そのビューはドロップされます。 ビューを作成する際にSYSADM権限が必要な場合の詳細については、「CREATE VIEW文の 権限 」を参照してください。

パッケージの無効化
パッケージを作成するために実行された特権またはロールの取り消しまたはカスケード取り消しは、取り消される側が他のソースから特権を保持しなくなると、パッケージを無効にします。 対応する許可キャッシュは、取り消し対象が他のソースからその特権を保持していたとしてもクリアされます。 詳細は、「パッケージが無効になる変更 」を参照してください。 1
作動不能パッケージ
パッケージの作成に使用されたユーザー定義関数に対するEXECUTE権限の取り消しまたはカスケード取り消しにより、パッケージが使用できなくなり、該当する権限キャッシュがクリアされます。1
権限に属する特権
管理権限を取り消すことはできますが、その管理権限に固有の特定の特権を個別に取り消すことはできません。

P を権限 X に固有の特権とします。 X 権限を持つユーザーは、P の明示的な付与の結果として、P 特権を持つこともできます。 このような場合には、次のような処理が行われます。

  • X が取り消されても、依然としてユーザーは特権 P を持っています。
  • P が取り消されても、これは X に固有の特権なので、依然として ユーザーはこの特権を持っていることになります。
信頼できるコンテキストでの特権の取り消し
ROLE AS OBJECT OWNER 節を使用して定義された信頼できるコンテキストで行われた取り消しの結果、取り消し者が有効なロールになります。 ステートメントが動的に準備される場合、 取り消し者は、そのステートメントを実行しているユーザーに関連付けられているロールになります。 ステートメントがプログラムに組み込まれている場合、取り消し者はプランまたはパッケージの所有者です。 ROLE AS OBJECT OWNER 文節がトラステッド・コンテキストに対して指定されていない場合、取り消し者はプロセスの許可 ID です。
所有権特権
オブジェクトの所有権に固有の特権を取り消すことはできません。
従属特権を含まない取り消し
権限が特定のユーザーから剥奪された場合、 NOT INCLUDING DEPENDENT PRIVILEGES、そのユーザーによって行われた付与は取り消されず、付与者は変更されません。 そのユーザーが後に同じ特権を付与され、その後、この特権が指定により取り消された場合、 INCLUDING DEPENDENT PRIVILEGES、そのユーザーが以前に付与したすべての権限も取り消されます。 以下の例を参照してください。
ユーザー U1 に、表 T1 に対する SELECT が GRANT OPTION 付きで付与される場合:
  1. U1 はこの特権を U2 に付与します。
  2. SELECT 特権が、従属する特権を含めずに U1 から取り消されます。 その結果、U1 から U2 に対する付与は取り消されません。
  3. U1 に T1 に対する SELECT が再度付与されます。
  4. SELECT が、従属する特権を含めて U1 から取り消され、U1 から U2 に対する付与も取り消されます。
ユーザー U1 に SYSADM 権限が付与されている場合:
  1. U1 は、特権 P1 を U2 に、特権 P2 を U3 に付与します。
  2. SYSADM が、従属する特権を含めずに U1 から取り消されます。 U2 および U3 に対する特権 P1 および P2 の付与は取り消されません。
  3. U1 に SYSADM が再度付与されます。 U1 は特権 P3 を U3 に付与します。
  4. SYSADM が、従属する特権を含めて U1 から取り消されます。 U2 に対して付与された P1、および U3 に対して付与された P2 と P3 も取り消されます。
1 ストアドプロシージャへの依存関係は、プロシージャ名が定数として指定されている場合のみ確認でき、CALL文のホスト変数経由では確認できません。