REVOKE (表、ビュー、またはニックネーム特権) ステートメント
この形式の REVOKE ステートメントは、表、ビュー、またはニックネームに対する特権を取り消します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
- 参照されている表、ビュー、またはニックネームに対する CONTROL 特権
- 指定した表、ビュー、またはニックネームが含まれるスキーマに対するスキーマ ACCESSCTRL 権限
- ACCESSCTRL または SECADM 権限
CONTROL 特権を取り消すためには、スキーマ ACCESSCTRL、ACCESSCTRL、または SECADM の各権限が必要です。 カタログ表およびビューに対する特権を取り消すためには、データベース ACCESSCTRL または SECADM 権限が必要です。
構文
説明
- ALL または ALL PRIVILEGES
- 指定された表、ビュー、またはニックネームに対して authorization-name
に与えられている特権をすべて (CONTROL を除く) 取り消します。
ALL を指定しない場合は、オプションのリストに示しているキーワード (ALTER から UPDATE まで) のうち 1 つ以上を使用する必要があります。 各キーワードは、それぞれ説明されている特権を取り消しますが、 その取り消しは ON 節に指定する表、ビュー、またはニックネームに当てはまる場合にのみ行われます。 同じキーワードを複数回指定することはできません。
- ALTER
- 基本表の定義への列の追加、表の主キーまたはユニーク制約の作成またはドロップ、 表の外部キーの作成またはドロップ、表、ビュー、またはニックネームに対するコメントの追加や変更、 チェック制約の作成またはドロップ、トリガーの作成、ニックネームに対する列オプションの追加、リセット、ドロップ、 またはニックネームの列名やデータ・タイプの変更を行うための特権を取り消します。
- CONTROL
- 表、ビュー、またはニックネームをドロップする権限、
および表または索引に対して RUNSTATS ユーティリティーを実行する権限を取り消します。
authorization-name から CONTROL 特権を取り消しても、 そのオブジェクトに対してそのユーザーに付与されているその他の特権は取り消されません。
- DELETE
- 表、更新可能なビュー、またはニックネームから行を削除する特権を取り消します。
- INDEX
- 表の索引、またはニックネームの SPECIFICATION ONLY 指定の索引を作成する特権を取り消します。 索引または SPECIFICATION ONLY 指定の索引の作成者には、 その索引または SPECIFICATION ONLY 指定の索引に対する CONTROL 特権が自動的に与えられます (これにより、 作成者は索引または SPECIFICATION ONLY 指定の索引をドロップできます)。 さらに、INDEX 特権が取り消されても、作成者は CONTROL 特権をそのまま保持します。
- INSERT
- 表、更新可能なビュー、またニックネームに行を挿入したり、 IMPORT ユーティリティーを実行したりする特権を取り消します。
- REFERENCES
- 親として表を参照する外部キーの作成、またはドロップを行う特権を取り消します。 列レベルの REFERENCES 特権もすべて取り消されます。
- SELECT
- 表またはビューからの行の検索、表に対するビューの作成、
および表またはビューに対して EXPORT ユーティリティーを実行する特権を取り消します。
SELECT 特権を取り消すと、ビューによっては作動不能になるものがあります。 (作動不能なビューについては、『CREATE VIEW』を参照してください。)
- UPDATE
- 表、更新可能なビュー、またはニックネームの行を更新する特権を取り消します。 列レベルの UPDATE 特権もすべて取り消されます。
- ON TABLE table-name または view-name または nickname
- 特権を取り消す表、ビュー、またはニックネームを指定します。 table-name を宣言済み一時表にすることはできません (SQLSTATE 42995)。
- FROM
- 特権を誰から取り消すかを指定します。
- USER
- authorization-name がユーザーであることを指定します。
- GROUP
- authorization-name がグループ名であることを指定します。
- ROLE
- authorization-name がロール名であることを指定します。
- authorization-name,...
- 1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。
この許可 ID のリストに、このステートメントを発行するユーザーの許可 ID を含めることはできません (SQLSTATE 42502)。
- PUBLIC
- PUBLIC から特権を取り消します。
- BY ALL
- 指定された個々の特権を、その付与者にかかわらず、 それらの特権を明示的に付与されたユーザーのうち指定された人から取り消します。 これがデフォルトの動作です。
規則
- 指定したそれぞれの authorization-name に関して、USER、GROUP、ROLE のいずれも指定されていない場合には、次のようになります。
- 被認可者が authorization-name である SYSCAT.TABAUTH および SYSCAT.COLAUTH カタログ・ビュー内の指定されたオブジェクトのすべての行について、以下が該当します。
- すべての行の GRANTEETYPE が「U」の場合、USER であると見なされます。
- すべての行の GRANTEETYPE が「G」の場合、GROUP であると見なされます。
- すべての行の GRANTEETYPE が「R」の場合、ROLE であると見なされます。
- すべての行の GRANTEETYPE の値が同じでない場合、エラーが戻されます (SQLSTATE 56092)。
- 被認可者が authorization-name である SYSCAT.TABAUTH および SYSCAT.COLAUTH カタログ・ビュー内の指定されたオブジェクトのすべての行について、以下が該当します。
注
- ビューの所有者である authorization-name (SYSCAT.VIEWS の OWNER 列に記録されている) から特権が取り消されると、従属するビューの特権も取り消されます。
- ビューの所有者が、そのビュー定義が従属しているオブジェクトに対する SELECT 特権を失った場合、またはそのビュー定義が従属するオブジェクトがドロップされるか、または別のビューのために作動不能になった場合、そのビューは作動不能になります。
ただし、ACCESSCTRL または SECADM 権限を持つユーザーが所有者からビューの特権すべてを明示的に取り消した場合、 SYSCAT.TABAUTH にはその所有者についてのレコードが表示されませんが、ビューには何も影響がなく作動可能のままになります。
- 作動不能なビューに対する特権は取り消すことはできません。
- パッケージのバインド時の許可 ID が、パッケージの依存するオブジェクトに対する特権を失った場合、パッケージは無効になる可能性があります。
特権は、次のいずれかの場合に失われる可能性があります。
- 許可 ID から特権が取り消された場合
- 許可 ID がメンバーとなっているロールから特権が取り消された場合
- PUBLIC から特権が取り消された場合
例えば、USER1 が所有するパッケージに表 T1 からの SELECT が含まれ、その表 T1 に対する SELECT 特権が USER1 から取り消された場合、パッケージは無効としてマークされます。 SELECT 権限が再び付与された場合、またはそのユーザーに DBADM 権限が与えられている場合には、パッケージは実行時に正常に再バインドされます。
別の例として、あるパッケージが、ロール R1 のメンバーである USER1 によって所有されているとします。 パッケージには表 T1 からの SELECT が含まれ、その表 T1 に対する SELECT 特権がロール R1 から取り消されたとします。 USER1 が表 T1 に対する SELECT 特権を他の方法で保持していない限り、パッケージは無効としてマークされます。
- FROM 節で OUTER(Z) を使用するパッケージ、トリガー、またはビューは、Z のすべての副表またはサブビューに対する SELECT 特権に依存しています。同じように、パッケージ、トリガー、またはビューで DEREF(Y) が使用されていて、Y が表またはビュー Z をターゲットとする参照タイプである場合には、Z のすべての副表またはサブビューに対する SELECT 特権があるかどうかに依存しています。パッケージのバインド時の許可 ID、またはトリガーやビューの所有者が SELECT 特権を失った場合には、そのようなパッケージが無効になり、そのようなトリガーやビューが作動不能になる可能性があります。
SELECT 特権は、次のいずれかの場合に失われる可能性があります。
- 許可 ID から SELECT 特権が取り消された場合
- 許可 ID がメンバーとなっているロールから SELECT 特権が取り消された場合
- PUBLIC から SELECT 特権が取り消された場合
- CONTROL 特権も取り消さない限り、 そのオブジェクトに対する CONTROL が与えられている authorization-name から表、 ビューまたはニックネームの特権を取り消すことはできません (SQLSTATE 42504)。
- 特定の特権の取り消しにより、アクションを実行する権限が取り消されるとは限りません。 PUBLIC、グループ、またはロールが他の特権を持っている場合、あるいはユーザーが表またはビューのスキーマに対する ALTERIN などの特権を持っている場合には、ユーザーは作業を続行できます。
- マテリアライズ照会表の所有者が、マテリアライズ照会表定義が従属している表に対する SELECT 特権を失った場合 (またはマテリアライズ照会表定義が従属する表がドロップされる場合)、マテリアライズ照会表はドロップされます。
ただし、SECADM または ACCESSCTRL 権限を持つユーザーが明示的に所有者からマテリアライズ照会表の特権すべてを取り消した場合には、SYSTABAUTH のその所有者についてのレコードは削除されますが、 マテリアライズ照会表には何も影響がなく作動可能のままになります。
- ニックネーム特権を取り消しても、 データ・ソース・オブジェクト (表またはビュー) の特権に影響を与えることはありません。
- オブジェクトが従属しているためにドロップできない SQL 関数またはメソッド本体がある場合は、 その SQL 関数またはメソッド本体で直接または間接的に参照される表やビューに対する SELECT 特権も取り消せない場合があります (SQLSTATE 42893)。
- SELECT 特権を取り消すと、以下のような場合に、SQL 関数またはメソッド本体がドロップされます。
- SQL 関数またはメソッド本体の所有者が、SQL 関数またはメソッド本体の定義が依存しているオブジェクトに対する SELECT 特権を失った場合。PUBLIC からの取り消しまたは所有者がメンバーとなっているロールからの取り消しによって特権が失われる場合がある点に注意してください。
- SQL 関数またはメソッド本体の定義が依存しているオブジェクトがドロップされた場合。
- WITH GRANT OPTION の取り消し: WITH GRANT OPTION を取り消す唯一の方法は、特権自体を取り消してから、WITH GRANT OPTION を指定せずに特権を再度付与するという方法です。
- 列特権の取り消し: 列特権を取り消す唯一の方法は、特権を表全体そのものから取り消してから、それを列ごとに再度付与するという方法です。
例
- 例 1: ユーザー ENGLES から、表 EMPLOYEE に対する SELECT 特権を取り消します。
SYSCAT.TABAUTH カタログ・ビューにはこの表とユーザーについての行が 1 行あり、
その GRANTEETYPE の値は U です。
REVOKE SELECT ON TABLE EMPLOYEE FROM ENGLES - 例 2: 以前にすべてのローカル・ユーザーに与えられた表 EMPLOYEE に対する更新特権を取り消します。
特定のユーザーに対する特権付与には影響を与えない点に注意してください。
REVOKE UPDATE ON EMPLOYEE FROM PUBLIC - 例 3: ユーザー PELLOW と MLI、およびグループ PLANNERS から、
表 EMPLOYEE に対する特権をすべて取り消します。
REVOKE ALL ON EMPLOYEE FROM USER PELLOW, USER MLI, GROUP PLANNERS - 例 4: JOHN という名前のユーザーから、表 CORPDATA.EMPLOYEE に対する SELECT 特権を取り消します。
SYSCAT.TABAUTH カタログ・ビューにはこの表とユーザーについての行が 1 行あり、
その GRANTEETYPE の値は U です。
またはREVOKE SELECT ON CORPDATA.EMPLOYEE FROM JOHN
GROUP JOHN には特権が与えられていないので、 GROUP JOHN から特権を取り消そうとしてもエラーになります。REVOKE SELECT ON CORPDATA.EMPLOYEE FROM USER JOHN - 例 5: JOHN という名前のグループから、
表 CORPDATA.EMPLOYEE に対する SELECT 特権を取り消します。
SYSCAT.TABAUTH カタログ・ビューにはこの表とユーザーについての行が 1 行あり、
その GRANTEETYPE の値は G です。
またはREVOKE SELECT ON CORPDATA.EMPLOYEE FROM JOHNREVOKE SELECT ON CORPDATA.EMPLOYEE FROM GROUP JOHN - 例 6: ユーザー SHAWN から、
ニックネーム ORAREM1 の SPECIFICATION ONLY 指定の索引を作成する特権を取り消します。
REVOKE INDEX ON ORAREM1 FROM USER SHAWN
