この記事では、REVOKEの構文、説明、および例を紹介します。
概要
REVOKE [ GRANT OPTION FOR]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER}
[, ...] | すべての [特権]}
ON { [テーブル] table_name [, ...]
| SCHEMA schema_nameのすべての表 [, ...] }
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [テーブル] table_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE}
[, ...] | すべての [特権]}
ON {シーケンスsequence_name [, ...]
| SCHEMA schema_nameのすべてのシーケンス [, ...] }
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | すべての [特権]}
ON DATABASE database_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
ドメイン名 [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
外国データラッパーfdw_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
ON FOREIGN SERVER server_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{EXECUTE | すべての [特権]}
ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ]] [, ...]
| すべての {機能 | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
言語lang_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE } [, ...] | すべての [プライバシー]}
大きなオブジェクトのloid [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [, ...] | すべての [プライバシー]}
ON SCHEMA schema_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{CREATE | すべての [特権]}
テーブルスペース上tablespace_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
ON TYPE type_name [, ...]
FROM role_specification [, ...]
[ CASCADE | RESTRICT ]
REVOKE [アドミンオプション]
role_name [, ...] FROM role_specification [, ...]
[GRANTED BY role_specification]
[ CASCADE | RESTRICT ]
ここで、role_specificationは次のようになります。
[グループ] role_name
| パブリック
| CURRENT_USER
| セッション_ユーザー 説明
REVOKEコマンドは、1つ以上のロールから以前に付与された権限を取り消します。 PUBLICというキーワードは、暗黙的に定義されたすべての役割のグループを指します。
特権タイプの意味については、GRANTコマンドの説明を参照してください。
特定のロールには、直接付与される特権、現在メンバーであるロールに付与される特権、およびPUBLICに付与される特権の合計があります。 したがって、たとえば、PUBLICからSELECT特権を取り消すことは、必ずしもすべてのロールがオブジェクト上のSELECT特権を失ったことを意味するわけではありません。 同様に、PUBLICまたは別のメンバシップロールがまだSELECT権限を持っている場合、ユーザーからSELECTを取り消しても、そのユーザーがSELECTを使用できなくなることはありません。
GRANT OPTION FORが指定されている場合、特権自体ではなく、特権の付与オプションのみが取り消されます。 それ以外の場合、特権と付与オプションの両方が取り消されます。
ユーザーが付与オプション付きの特権を保持し、それを他のユーザーに付与した場合、それらの他のユーザーが保持する特権は従属特権と呼ばれます。 最初のユーザーが保持する特権または付与オプションが取り消されており、依存特権が存在する場合、CASCADEが指定されている場合、それらの依存特権も取り消されます。指定されていない場合、取り消しアクションは失敗します。 この再帰的取り消しは、このREVOKEコマンドの対象であるユーザーに追跡可能なユーザーチェーンを通じて付与された特権にのみ影響します。 したがって、影響を受けるユーザーは、他のユーザーからも権限が付与されている場合、効果的に権限を保持できます。
テーブルの特権を取り消すと、対応する列の特権 (存在する場合) もテーブルの各列で自動的に取り消されます。 一方、ロールにテーブルの特権が付与されている場合、個々の列から同じ特権を取り消しても効果はありません。
ロールのメンバーシップを取り消す場合、GRANT OPTIONはADMIN OPTIONと呼ばれますが、動作は似ています。 この形式のコマンドでは、GRANTED BYオプションも使用できますが、そのオプションは現在無視されています (名前付きロールの存在をチェックする場合を除きます) 。 また、この形式のコマンドでは、role_specificationでノイズワードGROUPを使用できません。
注
ユーザーは、そのユーザーによって直接付与された特権のみを取り消すことができます。 例えば、ユーザAが許可オプションを有する特権をユーザBに許可し、ユーザBがそれをユーザCに許可した場合、ユーザaはCから直接特権を取り消すことができない。代わりに、ユーザーAはユーザーBからの許可オプションを取り消し、CASCADEオプションを使用して、特権がユーザーCから取り消されるようにします。別の例では、AとBの両方がCに同じ特権を付与した場合、AはBの許可ではなく自身の許可を取り消すことができ、したがってCは依然として効果的に特権を有する。
オブジェクトの非所有者がオブジェクトに対する特権をREVOKEしようとすると、ユーザーがオブジェクトに対して特権をまったく持たない場合、コマンドは完全に失敗します。 何らかの特権が利用可能である限り、コマンドは続行するが、ユーザが許可オプションを有する特権のみを取り消す。 REVOKE ALL PRIVILEGESフォームは、許可オプションが保持されていない場合に警告メッセージを発行し、他のフォームは、コマンドで具体的に指定された特権のいずれかに対する許可オプションが保持されていない場合に警告を発行する。 (原則として、これらのステートメントはオブジェクトの所有者にも適用されますが、所有者は常にすべての付与オプションを保持しているものとして扱われるため、ケースは発生しません。)
スーパーユーザーがGRANTまたはREVOKEコマンドを発行することを選択した場合、コマンドは、影響を受けるオブジェクトの所有者によって発行されたかのように実行されます。 すべての特権は最終的にはオブジェクト所有者から来るので (おそらく付与オプションのチェーンを介して間接的に) 、スーパーユーザーはすべての特権を取り消すことができますが、これには上記のようにCASCADEを使用する必要があります。
REVOKEは、影響を受けるオブジェクトの所有者ではなく、オブジェクトを所有するロールのメンバーであるロール、またはオブジェクトに対する権限WITH GRANT OPTIONを保持するロールのメンバーであるロールによって実行することもできます。 この場合、コマンドは、オブジェクトを実際に所有するか、またはWITH GRANT OPTION特権を保持する包含ロールによって発行されたかのように実行される。 たとえば、テーブルt1がロールg1によって所有され、ロールu1がメンバーである場合、u1は、g1によって付与されたものとして記録されたt1の特権を取り消すことができます。 これには、u1およびロールg1の他のメンバーによって行われた許可が含まれます。
REVOKEを実行しているロールが複数のロールメンバーシップパスを介して間接的に特権を保持している場合、コマンドを実行するためにどのロールを使用するかは指定されません。 このような場合は、SET ROLEを使用してREVOKEを実行する特定のロールにすることをお勧めします。 そうしないと、意図した以外の特権を取り消すか、何も取り消さない可能性があります。
示例
テーブル映画の一般公開のための挿入特権を取り消す:
公開からの映画への挿入を拒否します。ビューの種類に関するユーザーmanuelからすべての特権を取り消す:
マヌエルから種類のすべての特権を取り消す;ユーザーjoeからロール管理者のメンバーシップを取り消す:
REVOKE管理者からジョー;