PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# REVOKE

## 名前

REVOKE -- アクセス権限を取り消す

## 概要

    REVOKE [ GRANT OPTION FOR ]
        { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
        [,...] | ALL [ PRIVILEGES ] }
        ON [ TABLE ] tablename [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { { SELECT | INSERT | UPDATE | REFERENCES } ( column [, ...] )
        [,...] | ALL [ PRIVILEGES ] ( column [, ...] ) }
        ON [ TABLE ] tablename [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { { USAGE | SELECT | UPDATE }
        [,...] | ALL [ PRIVILEGES ] }
        ON SEQUENCE sequencename [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
        ON DATABASE dbname [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON FOREIGN DATA WRAPPER fdwname [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON FOREIGN SERVER servername [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { EXECUTE | ALL [ PRIVILEGES ] }
        ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON LANGUAGE langname [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
        ON SCHEMA schemaname [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ]
        { CREATE | ALL [ PRIVILEGES ] }
        ON TABLESPACE tablespacename [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]

    REVOKE [ ADMIN OPTION FOR ]
        role [, ...] FROM rolename [, ...]
        [ CASCADE | RESTRICT ]

## 説明

`REVOKE`コマンドは、1つ以上のロールに対して、以前に与えた権限を取り消します。 `PUBLIC`キーワードは暗黙的に定義された全ロールからなるグループです。

権限の種類の意味についてはGRANTコマンドの説明を参照してください。

全てのロールは、そのロールに直接許可された権限、現在属しているロールに許可された権限、`PUBLIC`に許可された権限という3つの権限を合わせた権限を持っていることに注意してください。 したがって、例えば、`PUBLIC`から`SELECT`権限を取り消すことは、必ずしも全てのロールがそのオブジェクトに対する`SELECT`権限を失うことを意味しません。 権限が直接許可されているロール、あるいは、別ロール経由で許可されているロールは、`SELECT`権限を持ち続けます。 同様にユーザから`SELECT`を取りあげても、`PUBLIC`またはほかのメンバとして属するロールが`SELECT`権限を持つ場合、`SELECT`の使用を拒否できません。

`GRANT OPTION FOR`が指定された場合、権限自体ではなく、その権限のグラントオプションのみが取り消されます。 指定されていなければ、権限とグラントオプションの両方が取り消されます。

グラントオプション付きの権限を保持しているユーザが、その権限を他ユーザに与えていた場合、与えられたユーザが保持する権限は依存権限と呼ばれます。 権限を与えたユーザ自身の権限やグラントオプションが取り消された時、その権限に依存権限が存在する場合、`CASCADE`が指定されていると依存権限も取り消されます。指定されていなければ、権限の取り消しが失敗します。 この再帰的な権限の取り消しは、ユーザ権限の連鎖を通じて与えられた権限の中でも、`REVOKE`を実行されたユーザから追跡可能な範囲にのみ影響します。 したがって、依存権限を持つユーザが他のユーザからも同じ権限を与えられている場合は、`REVOKE`が実行された後もその権限を保持している可能性があります。

テーブルの権限を取り消す場合、対応する列の権限（もしあれば）も自動的に、そのテーブルの各列から取り消されます。

ロールのメンバ資格を取り消す場合、同様に振舞いますが、`GRANT OPTION`ではなく`ADMIN OPTION`が呼び出されます。 また、このコマンド構文では無意味な`GROUP`という単語を受け付けないことに注意してください。

## 注釈

既存のテーブルや列に付与された権限を表示するためにはpsqlの`\dp`コマンドを使用してください。 この書式についてはGRANTを参照してください。 テーブル以外のオブジェクトについて、その権限を表示することができる他の`\d`コマンドが存在します。

取り消すことができるのは、ユーザが直接付与した権限のみです。 例えば、もし、ユーザAがグラントオプションを付けてユーザBに権限を与え、その後、ユーザBがユーザCにその権限を与えたとすると、ユーザAはユーザCの権限を直接取り消すことはできません。 その代わり、ユーザAがユーザBのグラントオプションを`CASCADE`オプション付きで取り消すことで、ユーザCに与えられた権限を取り消すことができます。 別の状況を考えてみます。AとBの両方が同じ権限をCに与えた場合、AはAの与えた権限を取り消すことはできますが、Bの与えた権限を取り消すことはできません。 したがって、Cは実質的にその権限を持ち続けることになります。

オブジェクトの所有者以外がそのオブジェクト上の権限に対して`REVOKE`を実行した場合、ユーザがオブジェクトに対して何の権限も持っていなければ、即座にコマンドが失敗します。 何らかの権限があればコマンド処理が続行されますが、取り消すことができるのはそのユーザがグラントオプションを持つ権限のみです。 `REVOKE ALL PRIVILEGES`構文をまったく権限を持たない状態で実行すると、警告が出力されます。 他の構文の場合は、そのコマンドで指名した権限に対するグラントオプションを持たない状態で実行すると、警告が出力されます （原理上、上記の説明はオブジェクト所有者にも適用されますが、所有者は常に全てのグラントオプションを保持しているので、こうした問題が発生することはありません）。

スーパーユーザが`GRANT`や`REVOKE`コマンドを発行した場合、そのコマンドは、対象のオブジェクトの所有者によって発行されものであるかのように動作します。 根本的には全ての権限はオブジェクトの所有者から渡されるものなので（ただし、グラントオプションの連鎖により間接的に渡される場合もありますが）、スーパーユーザは、全ての権限を取り消すことができます。 ただし、この場合は上述の`CASCADE`を使用する必要があります。

`REVOKE`および`REVOKE`は、影響するオブジェクトの所有者以外のロールによって実行することもできますが、 オブジェクトを所有するロールのメンバであるか、そのオブジェクトに対し`WITH GRANT OPTION`権限を持つロールのメンバでなければなりません。 この場合、 そのオブジェクトの実際の所有者ロールまたは`WITH GRANT OPTION`権限を持つロールによって発行されたかのように、このコマンドは実行されます。 例えば、`t1`テーブルが`g1`ロールによって所有され、`u1`が`g1`ロールのメンバであるとします。 この場合、`u1`は`g1`で付与されたものと記録されている権限を取り上げることができます。 これには、`u1`が付与した権限と`g1`ロールの他のメンバによって付与された権限が含まれます。

`REVOKE`を実行したロールが、ロールの持つ複数メンバ資格の経路を通して間接的に必要な権限を持つ場合、 どのロールが権限を付与したロールとして記録されるかについては指定されません。 こうした場合、`SET ROLE`を使用して、`REVOKE`を行わせたい特定のロールになることを推奨します。 こうしないと、意図しないロールによって権限を取り上げることになったり、取り上げ辞退が失敗することになったりします。

## 例

publicに与えた`films`テーブルに対する挿入権限を取り消します。

    REVOKE INSERT ON films FROM PUBLIC;

`kinds`ビューから、`manuel`ユーザに与えた全ての権限を取り上げます。

    REVOKE ALL PRIVILEGES ON kinds FROM manuel;

これは"自分が与えた全ての権限を取り消す"ことを意味します。

ユーザ`joe`からロール`admins`内のメンバ資格を取り上げます。

    REVOKE admins FROM joe;

## 互換性

GRANTコマンドの互換性についての注釈は`REVOKE`にも当てはまります。 標準では、キーワード`RESTRICT`か`CASCADE`のどちらかが必須です。 しかし、PostgreSQLではデフォルトで`RESTRICT`と仮定されます。

## 関連項目

GRANT

前のページ | ホーム | 次のページ
RESET | 上に戻る | ROLLBACK