REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE dbname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ([type, ...]) [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
REVOKEコマンドは、1つ以上のユーザあるいはユーザグループから以前に与えられた権限を取り上げます。 PUBLICキーワードは暗黙的に定義された全ユーザからなるグループです。
権限の種類の意味についてはGRANTコマンドの説明を参照してください。
個々のユーザは全て、ユーザに直接許可された権限、ユーザが現在属しているグループに許可された権限、そして、PUBLICに許可された権限を合わせた権限を持っていることに注意してください。 従って、例えば、PUBLICからSELECT権限を取り上げることは、必ずしもそのオブジェクトに対するSELECT権限を全てのユーザが失うことを意味しません。 直接、あるいは、グループ経由で許可されたユーザは、その権限を持ち続けます。
GRANT OPTION FORが指定された場合、権限自体ではなく、その権限のグラントオプションのみが取り上げられます。 指定されていない場合、権限とグラントオプションの両方とも取り上げられます。
ユーザがグラントオプションを持つ権限を保持し、その権限を他ユーザに与えていた場合、他のユーザが保持する権限は依存権限と呼ばれます。 最初のユーザが持つ権限やグラントオプションが取り上げられ、かつ、依存権限が存在する場合、CASCADEが指定されると依存権限もまた取り上げられ、指定されていなければ、権限の取り上げが失敗します。 この再帰的な取り上げは、REVOKEを実行したユーザが追跡可能なユーザの連鎖を通して与えられた権限にのみ影響します。 従って、もし、権限が他のユーザを介して与えられたならば、影響を受けるユーザは実際にはその権限を保持する場合もあります。
既存オブジェクトに付与された権限を表示するにはpsqlの\zコマンドを使用してください。 この書式についてはGRANTを参照してください。
ユーザが直接付与した権限のみをそのユーザは取り上げることができます。 例えば、もし、ユーザAがグラントオプションを付けてユーザBに権限を与え、その後、ユーザBがユーザCにその権限を与えたとすると、ユーザAはユーザCの権限を直接取り上げることはできません。 その代わり、ユーザAはユーザBからグラントオプションを、CASCADEオプションを付けて取り上げることで、ユーザCに与えられた権限も続いて取り上げることができます。 他の例を挙げると、AとBの両方が同じ権限をCに与えたとすると、AはAの与えた権限を取り上げることはできますが、Bの与えた権限を取り上げることはできません。 従って、Cは実質的にその権限を持ち続けることになります。
オブジェクトの所有者以外がそのオブジェクト上の権限に対してREVOKEを実行すると、ユーザがオブジェクトに何らかの権限を持っていない限り、コマンドは権限外のために失敗します。 何らかの権限がある限り、コマンドは進行しますが、そのユーザがグラントオプションを持つ権限のみを取り上げることができます。 権限を全く持たない場合は、REVOKE ALL PRIVILEGES形式は警告を出力します。 他の形式では、そのコマンドで指名した権限のいずれかに対するグラントオプションを持たない場合に警告を出力します。 (原理上、上の説明はオブジェクト所有者にも適用されますが、所有者は常に全てのグラントオプションを保持していますので、こうした問題は発生することはありません。)
スーパーユーザがGRANTやREVOKEコマンドの発行を選択した場合、そのコマンドは、対象のオブジェクトの所有者によって発行されたかのように動作します。 根本的に全ての権限はオブジェクトの所有者から渡されるもの(グラントオプションの連鎖による間接的な場合もあります)ですので、スーパーユーザは、全ての権限を取り上げることができます。 しかし、これには上述のCASCADEを使用する必要があります。
filmsテーブルから、publicに与えた挿入権限を取り上げます。
REVOKE INSERT ON films FROM PUBLIC;
kindsビューから、manuelユーザに与えた全ての権限を取り上げます。
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
実質、これは"私が与えた全ての権限を取り上げる"ことを意味します。
GRANTコマンドの互換性についての注釈はREVOKEにも当てはまります。 構文の要約を以下に示します。
REVOKE [ GRANT OPTION FOR ] privileges ON object [ ( column [, ...] ) ] FROM { PUBLIC | username [, ...] } { RESTRICT | CASCADE }
標準に従うとRESTRICTかCASCADEのどちらかが必要です。 しかし、PostgreSQLではデフォルトでRESTRICTと仮定しています。