PostgreSQLでは、一般的に必要とされる、特権のある機能や情報にアクセスできるよう、いくつかのあらかじめ定義されたロールを提供しています。
管理者(CREATEROLE権限を持つロールを含む)は自分の環境のユーザあるいは他のロールに対し、これらのロールをGRANT(付与)することで、それらのユーザに、その機能や情報を提供することができます。
例えば以下です。
GRANT pg_signal_backend TO admin_user;
これらのロールを付与する場合、機密情報へのアクセス権が与えられるということを理解したうえで、必要な場合にのみ使用されるように注意する必要があります。
定義済みロールについては以下で説明します。 それぞれのロールの個別の権限については、将来、さらなる機能が追加される時に変更されるかもしれないことに注意してください。 管理者は、変更がないかリリースノートを確認するようにしてください。
pg_checkpoint #
pg_checkpointは、CHECKPOINTコマンドの実行を許可します。
pg_create_subscription #
pg_create_subscriptionは、データベースでのCREATE権限を持つユーザに対して、CREATE SUBSCRIPTIONの実行を許可します。
pg_database_owner #
pg_database_ownerロールには、暗黙的なメンバが常に1つだけあります。
すなわち、現在のデータベースの所有者です。
どのロールにもメンバ資格を付与することはできませんし、pg_database_ownerのメンバ資格を付与できるロールもありません。
ただし、他のロールと同様に、オブジェクトを所有したりアクセス権限の付与を受けたりすることはできます。
したがって、pg_database_ownerがテンプレートデータベース内で権限を一度持てば、そのテンプレートから作成されたデータベースの所有者は皆、その権限を持つことになります。
最初は、このロールはpublicスキーマを所有していますので、各データベースの所有者がそのスキーマのローカルでの使用を管理します。
pg_maintain #
pg_maintainは、MAINTAIN権限があるかのように、すべてのリレーションに対してVACUUM、ANALYZE、CLUSTER、REFRESH MATERIALIZED VIEW、REINDEX、およびLOCK TABLEを実行することを許可します。
pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables #これらのロールは、管理者がデータベースサーバを監視するためのロールを簡単に設定できるようにすることを目的としています。 これらのロールは、通常はスーパーユーザに制限されている、各種の有用な構成設定、統計情報、および他のシステム情報を読み取るための一般的な権限のセットを付与することができます。
pg_monitorは、各種の監視ビューや関数を読み取ること/実行することを許可します。
このロールは、pg_read_all_settings、pg_read_all_stats、およびpg_stat_scan_tablesのメンバです。
pg_read_all_settingsは、通常スーパーユーザのみに見える、すべての設定変数を読み取ることを許可します。
pg_read_all_statsは、通常スーパーユーザのみに見える、すべてのpg_stat_*ビューの読み取りと各種統計関連の拡張の使用を許可します。
pg_stat_scan_tablesは、潜在的にテーブルに対して長時間ACCESS SHAREロックを取得する可能性がある関数(例えばpgrowlocks拡張のpgrowlocks(text))の監視を行うことを許可します。
pg_read_all_datapg_write_all_data #
pg_read_all_dataは、すべてのデータ(テーブル、ビュー、シーケンス)について、これらのオブジェクトのSELECT権限とすべてのスキーマのUSAGE権限を持っているかのように読み取ることを許可します。
このロールは、行レベルセキュリティ(RLS)ポリシーを無視しません。
RLSが使用されている場合、管理者はこのロールが付与されているロールに対してBYPASSRLSを設定したいと思うかもしれません。
pg_write_all_dataは、すべてのデータ(テーブル、ビュー、シーケンス)について、これらのオブジェクトのINSERT、UPDATE、およびDELETE権限とすべてのスキーマのUSAGE権限を持っているかのように書き込むことを許可します。
このロールは、行レベルセキュリティ(RLS)ポリシーを無視しません。
RLSが使用されている場合、管理者はこのロールが付与されているロールに対してBYPASSRLSを設定したいと思うかもしれません。
pg_read_server_filespg_write_server_filespg_execute_server_program #これらのロールは、信頼はできるがスーパーユーザではないロールが、データベースを実行するユーザとしてデータベースサーバ上のファイルにアクセスしたりプログラムを実行したりすることを、管理者が許可できるようにすることを意図しています。 これらのロールは、ファイルに直接アクセスする時はデータベースレベルの権限確認をすべて無視し、スーパーユーザレベルのアクセス権を取得するために使用できます。 そのため、これらのロールをユーザに付与する時には細心の注意が必要です。
pg_read_server_filesは、COPYやその他のファイルアクセス関数を使用して、データベースがサーバ上でアクセスできる任意の場所からファイルを読み取ることを許可します。
pg_write_server_filesは、COPYやその他のファイルアクセス関数を使用して、データベースがサーバ上でアクセスできる任意の場所のファイルに書き込むことを許可します。
pg_execute_server_programは、COPYやサーバ側のプログラムを実行できるその他の関数で、データベースを実行しているユーザとしてデータベースサーバ上でプログラムを実行することを許可します。
pg_signal_autovacuum_worker #
pg_signal_autovacuum_workerは、自動バキュームワーカーに対して、現在のテーブルのバキュームをキャンセルしたりそのセッションを終了させたりするためのシグナルを送信することを許可します。
9.28.2を参照してください。
pg_signal_backend #
pg_signal_backendは、他のバックエンドに対して、問い合わせをキャンセルしたりそのセッションを終了させたりするためのシグナルを送信することを許可します。
このロールでは、スーパーユーザが所有するバックエンドに対してシグナルを送信することは許可されないことに注意してください。
9.28.2を参照してください。
pg_use_reserved_connections #
pg_use_reserved_connectionsは、reserved_connectionsによって予約済みの接続スロットを使用することを許可します。