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 コマンドは、1つ以上のユーザあるいはユーザグループから以前に与えられた権限を取り上げます。 キーワードPUBLICは暗黙的に定義された全ユーザからなるグループです。
権限の種類の意味については GRANT コマンドの説明を参照してください。
個々のユーザはすべて、ユーザに直接許可された権限、ユーザが現在属しているグループに許可された権限、そして、PUBLIC に許可された権限を合わせた権限を持っていることに注意して下さい。 従って、例えば、PUBLIC から SELECT 権限を取り上げることは、必ずしもそのオブジェクトに対する SELECT 権限をすべてのユーザが失うことを意味しません。 直接、あるいは、グループ経由で許可されたユーザは、その権限を持ち続けます。
GRANT OPTION FOR が指定された場合、権限自体ではなく、その権限のgrantオプションのみが取り上げられます。
ユーザがgrantオプションを持つ権限を保持し、その権限を他ユーザに与えていた場合、他のユーザが保持する権限は依存権限と呼ばれます。 最初のユーザが持つ権限やgrantオプションが取り上げられ、依存権限が存在する場合、CASCADE が指定されると依存権限もまた取り上げられ、指定されていなければ、権限の取り上げが失敗します。 この再帰的な取り上げは、REVOKE を実行したユーザが追跡可能なユーザの連鎖を通して与えられた権限にのみ影響します。 従って、もし、権限が他のユーザを介して与えられたならば、影響を受けるユーザは実際にはその権限を保持する場合もあります。
既存オブジェクトに付与された権限を表示するには psqlの\zコマンドを使用してください。 この書式については GRANT を参照してください。
ユーザが直接付与した権限のみをそのユーザは取り上げることができます。 例えば、もし、ユーザ A がgrantオプションを付けてユーザBに権限を与え、その後、ユーザBがユーザCにその権限を与えたとすると、ユーザAはユーザCの権限を直接取り上げることはできません。 その代わり、ユーザAはユーザBからgrantオプションを、CASCADEオプションを付けて取り上げることで、自動的にユーザCに与えられた権限を自動的に取り上げることができます。
スーパーユーザが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と仮定されます。