22.5. 定義済みロール #

PostgreSQLでは、ある種の共通に必要で、特権のある機能や情報にアクセスできるよう、いくつかのあらかじめ定義されたロールを提供しています。 (CREATEROLE権限を持つロールを含む)管理者は自分の環境のユーザあるいはロールに対し、これらのロールをGRANT(付与)することで、それらのユーザに、その機能や情報を提供することができます。

定義済みロールについては表 22.1で説明します。 それぞれのロールの個別の権限については、将来、さらなる機能が追加されるに連れて変更されるかもしれないことに注意してください。 管理者は、変更がないかリリースノートを確認するようにしてください。

表22.1 定義済みロール

ロール可能なアクセス
pg_read_all_data それらのオブジェクトに対するSELECT権限を持っていて、明示的に持っていなかったとしてもすべてのスキーマに対してUSAGE権限を持っているかのように、すべてのデータ(テーブル、ビュー、シーケンス)を読み取る。 このロールにはロール属性BYPASSRLSは設定されていません。 RLSが使われているのであれば、管理者はこのロールがGRANTされるロールに対してBYPASSRLSを設定したいと思うかもしれません。
pg_write_all_data それらのオブジェクトに対するINSERTUPDATEおよびDELETE権限を持っていて、明示的に持っていなかったとしてもすべてのスキーマに対してUSAGE権限を持っているかのように、すべてのデータ(テーブル、ビュー、シーケンス)に書き込む。 このロールにはロール属性BYPASSRLSは設定されていません。 RLSが使われているのであれば、管理者はこのロールがGRANTされるロールに対してBYPASSRLSを設定したいと思うかもしれません。
pg_read_all_settings通常スーパーユーザのみが読み取れる、全ての設定変数を読み取る
pg_read_all_stats通常スーパーユーザのみが読み取れる、すべてのpg_stat_*ビューを読み取り、各種の統計関連のエクステンションを使用する
pg_stat_scan_tables潜在的に長時間、テーブルのACCESS SHAREロックを取得する可能性がある監視機能を実行する
pg_monitor各種の監視ビューや機能を読み取り/実行する。 このロールは、pg_read_all_settingspg_read_all_statsおよびpg_stat_scan_tablesのメンバです。
pg_database_ownerなし。メンバ資格は暗黙に現在のデータベースの所有者から構成されます。
pg_signal_backend他のバックエンドに問い合わせのキャンセルやセッションの終了のシグナルを送信する
pg_read_server_filesCOPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意の場所からファイルを読み取ることを許可する
pg_write_server_filesCOPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意の場所にファイルを書き込むことを許可する
pg_execute_server_programCOPYやサーバ側のプログラムを実行できるその他の関数で、データベースを実行しているユーザとしてデータベースサーバ上でのプログラムの実行を許可する
pg_checkpointCHECKPOINTコマンドの実行を許可する
pg_use_reserved_connectionsAllow use of connection slots reserved via reserved_connections.
pg_create_subscriptionAllow users with CREATE permission on the database to issue CREATE SUBSCRIPTION.

pg_monitorpg_read_all_settingspg_read_all_statsおよびpg_stat_scan_tablesロールは、データベースサーバを監視するためのロールを、管理者が簡単に設定できるようにする目的があります。 これらのロールは通常スーパーユーザに限定されている各種の有用な構成設定、統計情報およびその他のシステム情報を読むことができる一般的な権限のセットを与えることができます。

pg_database_ownerロールには暗黙で状況に依存したメンバが1つあります。すなわち、現在のデータベースの所有者です。 他のロールと同様に、オブジェクトを所有したり、アクセス権限の許可を受けたりすることができます。 したがって、pg_database_ownerがテンプレートデータベース内で権限を一度持てば、そのテンプレートから作成されたデータベースの所有者は皆、その権限を行使します。 pg_database_ownerは他のロールのメンバにはなれませんし、暗黙でないメンバも持てません。 最初に、このロールはpublicスキーマを所有していますので、各データベース所有者はそのスキーマのローカルでの利用を管理します。

pg_signal_backendロールは、信頼はできるが非スーパーユーザであるロールが他のバックエンドにシグナルを送信することを、管理者が許可できるようにすることを意図しています。 今のところ、このロールは他のバックエンドでの問い合わせをキャンセルしたり、セッションを終了するシグナルを送信できます。 しかしながら、このロールの権限を与えられたユーザは、スーパーユーザが所有するバックエンドにシグナルを送信できません。 9.27.2を参照してください。

pg_read_server_filespg_write_server_filespg_execute_server_programロールは、信頼はできるが非スーパーユーザであるロールがデータベースを実行しているユーザとしてデータベースサーバ上でファイルにアクセスしたりプログラムを実行したりすることを、管理者が許可できるようにすること意図しています。 これらのロールはサーバファイルシステムの任意のファイルにアクセスできますので、ファイルに直接アクセスする時にはデータベースレベルの権限検査はすべて行なわれず、スーパーユーザレベルのアクセスを得るのに使えます。ですので、これらのロールをユーザに許可する時には注意すべきです。

これらのロールを許可する場合は、必要な場合にのみ、これらのロールは機密情報へのアクセス権を与えることを理解して、使用されるように注意する必要があります。

管理者はGRANTコマンドを使って、ユーザにこれらのロールへのアクセスを許可できます。例えば、

GRANT pg_signal_backend TO admin_user;