★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER DEFAULT PRIVILEGES

ALTER DEFAULT PRIVILEGES — デフォルトのアクセス権限を定義する

概要

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke


ここでabbreviated_grant_or_revokeは以下のいずれかです。

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | CREATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMAS
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

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

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

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

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

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

説明

ALTER DEFAULT PRIVILEGESを使用すると、将来作成されるオブジェクトに適用される権限を設定できます。 (既存のオブジェクトに割り当てられている権限には影響しません。) 権限は大域的に(つまり現在のデータベース内に作成されるすべてのオブジェクトに対して)設定することも、指定したスキーマ内に作成されるオブジェクトのみに対して設定することもできます。

ユーザ自身のデフォルト権限とユーザがメンバとして属するロールのデフォルト権限は変更できますが、オブジェクト作成時には、新しいオブジェクト権限は現在のロールのデフォルト権限のみに影響され、現在のロールがメンバであるロールから継承されることはありません。

5.7の説明にある通り、どの種類のオブジェクトについてもデフォルト権限は通常、オブジェクト所有者に対して付与可能な権限すべてを付与します。 さらに、PUBLICに対して一部の権限を付与することがあります。 しかしALTER DEFAULT PRIVILEGESを用いて大域デフォルト権限を変更することで、この動作を変更できます。

現時点ではスキーマ、テーブル(ビュー、外部テーブルを含む)、シーケンス、関数、型(ドメインを含む)用の権限のみを変更可能です。 このコマンドでは、関数は集約とプロシージャを含みます。 FUNCTIONSROUTINESは、このコマンドでは同じです。 (ROUTINESが、関数とプロシージャを合わせた標準の用語ですので、今後は好まれます。 PostgreSQLの以前のリリースではFUNCTIONSだけが許されていました。 関数とプロシージャに対して別々にデフォルト権限を設定することはできません。)

スキーマ単位で指定されるデフォルト権限は、大域的な個々の種類のオブジェクト用のデフォルト権限に追加されます。 これは、スキーマ単位の権限が(デフォルトであれ、以前のスキーマを指定しないALTER DEFAULT PRIVILEGESコマンドよってであれ)大域的に付与されているのなら、それを取り消せないことを意味します。 スキーマ単位のREVOKEは、以前のスキーマ単位のGRANTの効果を取り消すのにのみ有用です。

パラメータ

target_role

target_roleによって作成されたオブジェクトのデフォルト権限、または指定されていない場合は現在のロールの権限を変更します。

schema_name

既存のスキーマの名前です。 指定された場合、そのスキーマ内で後に作成されるオブジェクトに対するデフォルト権限が変更されます。 IN SCHEMAを省略した場合、大域的なデフォルト権限が変更されます。 スキーマはネストできないため、スキーマに対する権限を設定する場合にはIN SCHEMAを指定できません。

role_name

権限を付与または取り消す、既存のロールの名前です。 このパラメータ、およびabbreviated_grant_or_revoke内の他のパラメータは、 GRANTREVOKEの説明通りに動作します。 ただし、指定したオブジェクトではなくオブジェクトクラス全体に対して権限を設定する点が異なります。

注釈

デフォルト権限としてすでに割り当てられている情報を入手するためにはpsql\ddpコマンドを使用してください。 権限の表示の意味は、5.7\dpの説明と同じです。

デフォルト権限を変更したロールを削除したい場合、デフォルト権限の項目を取り除くために、そのデフォルト権限の変更を元に戻すかDROP OWNED BYを使用する必要があります。

スキーマmyschema内に今後作成されるすべてのテーブル(およびビュー)に対して、全員にSELECT権限を付与します。 また、ロールwebuserにはそれらに挿入できるようにします。

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;

今後作成されるテーブルが通常以外の権限を持たないように、上を元に戻します。

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;

今後adminロールにより作成されるすべての関数について、通常関数に付与される、全員に対するEXECUTE権限を取り除きます。

ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

しかしながら、スキーマ1つに限定されたコマンドではそのような効果は達成できないということに注意してください。 対応するGRANTを取り消さない限り、以下のコマンドは効果がありません。

ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

スキーマ単位のデフォルト権限は、大域的な設定に権限を追加できるだけで、付与された権限を削除することはできないからです。

互換性

標準SQLにはALTER DEFAULT PRIVILEGES文はありません。

関連項目

GRANT, REVOKE