ALTER DEFAULT PRIVILEGES — デフォルトのアクセス権限を定義する
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }target_role
[, ...] ] [ IN SCHEMAschema_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
を用いて大域デフォルト権限を変更することで、この動作を変更できます。
現時点ではスキーマ、テーブル(ビュー、外部テーブルを含む)、シーケンス、関数、型(ドメインを含む)用の権限のみを変更可能です。
このコマンドでは、関数は集約とプロシージャを含みます。
FUNCTIONS
とROUTINES
は、このコマンドでは同じです。
(ROUTINES
が、関数とプロシージャを合わせた標準の用語ですので、今後は好まれます。
PostgreSQLの以前のリリースではFUNCTIONS
だけが許されていました。
関数とプロシージャに対して別々にデフォルト権限を設定することはできません。)
スキーマ単位で指定されるデフォルト権限は、大域的な個々の種類のオブジェクト用のデフォルト権限に追加されます。
これは、スキーマ単位の権限が(デフォルトであれ、以前のスキーマを指定しないALTER DEFAULT PRIVILEGES
コマンドよってであれ)大域的に付与されているのなら、それを取り消せないことを意味します。
スキーマ単位のREVOKE
は、以前のスキーマ単位のGRANT
の効果を取り消すのにのみ有用です。
target_role
target_role
によって作成されたオブジェクトのデフォルト権限、または指定されていない場合は現在のロールの権限を変更します。
schema_name
既存のスキーマの名前です。
指定された場合、そのスキーマ内で後に作成されるオブジェクトに対するデフォルト権限が変更されます。
IN SCHEMA
を省略した場合、大域的なデフォルト権限が変更されます。
スキーマはネストできないため、スキーマに対する権限を設定する場合にはIN SCHEMA
を指定できません。
role_name
権限を付与または取り消す、既存のロールの名前です。
このパラメータ、およびabbreviated_grant_or_revoke
内の他のパラメータは、 GRANTやREVOKEの説明通りに動作します。
ただし、指定したオブジェクトではなくオブジェクトクラス全体に対して権限を設定する点が異なります。
デフォルト権限としてすでに割り当てられている情報を入手するためには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
文はありません。