ALTER DEFAULT PRIVILEGES
を使用すると、将来作成されるオブジェクトに適用される特権を設定できます。 (既存のオブジェクトに割り当てられた特権には影響しません。)
説明
現在、スキーマ、テーブル (ビューと外部テーブルを含む) 、シーケンス、関数、およびタイプ (ドメインを含む) の権限のみを変更できます。 このコマンドの関数には、集計とプロシージャが含まれます。 FUNCTIONSとROUTINESという単語は、このコマンドでは同等です。 (ROUTINESは、機能と手順をまとめた標準用語として今後優先されます。 以前のPostgreSQLリリースでは、FUNCTIONSという単語のみが許可されていました。 関数とプロシージャのデフォルト特権を個別に設定することはできません。
デフォルトの権限は、自分自身または自分のメンバーであるロールによって作成されるオブジェクトに対してのみ変更できます。 特権はグローバルに (つまり、現在のデータベースで作成されたすべてのオブジェクトに対して) 、または指定されたスキーマで作成されたオブジェクトに対してのみ設定できます。 任意のオブジェクトタイプのデフォルト特権は、通常、オブジェクト所有者にすべての付与可能な権限を付与し、PUBLICにもいくつかの特権を付与することができます。 ただし、この動作は、ALTER default privileges
でグローバルデフォルト特権を変更することで変更できます。
スキーマごとに指定されたデフォルト特権は、特定のオブジェクトタイプのグローバルデフォルト特権に追加されます。 つまり、特権がグローバルに付与されている場合 (デフォルトで、またはスキーマを指定していない以前のALTER default privileges
コマンドに従って) 、スキーマごとに特権を取り消すことはできません。 スキーマごとのREVOKEは、以前のスキーマごとのGRANTの効果を逆にする場合にのみ役立ちます。
概要
ALTER DEFAULT PRIVILEGES
[FOR { ROLE | USER } target_role [, ...] ]
[IN SCHEMA schema_name [, ...] ]
省略_grant_or_revoke
ここで、expectated_grant_or_revokeは次のいずれかです。
GRANT { { SELECT | INSERT | 更新 | 削除 | トランケート | 参考文献 | トリガー}
[, ...] | すべての [特権]}
テーブルについて
TO { [グループ] role_name | PUBLIC } [, ...] [GRANTオプション付き]
GRANT { { USAGE | SELECT | UPDATE}
[, ...] | すべての [特権]}
シーケンスについて
TO { [グループ] role_name | PUBLIC } [, ...] [GRANTオプション付き]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON {機能 | ルーチン}
TO { [グループ] role_name | PUBLIC } [, ...] [GRANTオプション付き]
GRANT {使用 | すべての [特権]}
タイプについて
TO { [グループ] role_name | PUBLIC } [, ...] [GRANTオプション付き]
GRANT {使用 | 作成 | すべての [特権]}
SCHEMASで
TO { [グループ] role_name | PUBLIC } [, ...] [GRANTオプション付き]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER}
[, ...] | すべての [特権]}
テーブルについて
FROM { [グループ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE}
[, ...] | すべての [特権]}
シーケンスについて
FROM { [グループ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{EXECUTE | すべての [特権]}
ON {機能 | ルーチン}
FROM { [グループ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{USAGE | すべての [プライバシー]}
タイプについて
FROM { [グループ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{使用 | 作成 | すべての [特権]}
SCHEMASで
FROM { [グループ] role_name | PUBLIC } [, ...]
[カスケード | 制限]
パラメーター
target_role
: 現在のロールがメンバーである既存のロールの名前。 FOR ROLE
が省略された場合、現在のロールが仮定されます。
schema_name
: 既存のスキーマの名前。 指定すると、そのスキーマで後で作成されるオブジェクトのデフォルト権限が変更されます。 IN SCHEMA
を省略すると、グローバルデフォルト特権が変更されます。 スキーマをネストできないため、スキーマの特権を設定するときにIN SCHEMA
は許可されません。
role_name
: 特権を付与または取り消す既存のロールの名前。 このパラメーターと、略した_grant_or_revoke
の他のすべてのパラメーターは、GRANTまたはREVOKEの下で説明されているように動作します。ただし、特定の名前付きオブジェクトではなく、オブジェクトのクラス全体にアクセス許可を設定します。
注
デフォルト権限が変更されたロールを削除する場合は、デフォルト権限の変更を元に戻すか、drop OWNED BY
を使用してロールのデフォルト権限エントリを削除する必要があります。
例
後でスキーマmyschema
で作成するすべてのテーブル (およびビュー) のすべてのユーザーにSELECT権限
を付与し、ロールwebuser
がそれらにも挿入できるようにします。
SCHEMA mysema GRANT SELECTのALTER DEFAULT PRIVILEGESを公開する表に基づいて選択します。SCHEMAのALTER DEFAULT PRIVILEGESウェブユーザーへのテーブルへのmysema GRANT INSERT;
後で作成されるテーブルが通常よりも多くの権限を持たないように、上記を元に戻します。
SCHEMA mysemaのALTER DEFAULT PRIVILEGESは、公開からのテーブルの選択を変更します。SCHEMA mysemaのALTER DEFAULT PRIVILEGESウェブユーザーからのテーブルへの挿入を取り消します。
roleadminによってその後作成されるすべての関数に対して、関数に通常付与されるパブリックEXECUTE権限を削除します。
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
ただし、単一のスキーマに限定されたコマンドではその効果を達成できないことに注意してください。 一致するGRANTを元に戻さない限り、このコマンドは効果がありません。
SCHEMAのALTER DEFAULT PRIVILEGESパブリックからの機能に関する実行を拒否します。
これは、スキーマごとの既定の特権は、グローバル設定にのみ特権を追加でき、それによって付与された特権を削除できないためです。