PostgreSQLでは、ある種の共通に必要で、特権のある機能や情報にアクセスできるよう、いくつかのあらかじめ定義されたロールを提供しています。
(CREATEROLE
権限を持つロールを含む)管理者は自分の環境のユーザあるいはロールに対し、これらのロールをGRANT
(付与)することで、それらのユーザに、その機能や情報を提供することができます。
定義済みロールについては表 22.1で説明します。 それぞれのロールの個別の権限については、将来、さらなる機能が追加されるに連れて変更されるかもしれないことに注意してください。 管理者は、変更がないかリリースノートを確認するようにしてください。
表22.1 定義済みロール
ロール | 可能なアクセス |
---|---|
pg_read_all_data |
それらのオブジェクトに対するSELECT 権限を持っていて、明示的に持っていなかったとしてもすべてのスキーマに対してUSAGE権限を持っているかのように、すべてのデータ(テーブル、ビュー、シーケンス)を読み取る。
このロールにはロール属性BYPASSRLS は設定されていません。
RLSが使われているのであれば、管理者はこのロールがGRANTされるロールに対してBYPASSRLS を設定したいと思うかもしれません。
|
pg_write_all_data |
それらのオブジェクトに対するINSERT 、UPDATE および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_settings 、pg_read_all_stats およびpg_stat_scan_tables のメンバです。 |
pg_database_owner | なし。メンバ資格は暗黙に現在のデータベースの所有者から構成されます。 |
pg_signal_backend | 他のバックエンドに問い合わせのキャンセルやセッションの終了のシグナルを送信する |
pg_read_server_files | COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意の場所からファイルを読み取ることを許可する |
pg_write_server_files | COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意の場所にファイルを書き込むことを許可する |
pg_execute_server_program | COPYやサーバ側のプログラムを実行できるその他の関数で、データベースを実行しているユーザとしてデータベースサーバ上でのプログラムの実行を許可する |
pg_checkpoint | CHECKPOINT コマンドの実行を許可する |
pg_use_reserved_connections | reserved_connectionsによって予約済みの接続スロットの使用を許可する |
pg_create_subscription |
CREATE SUBSCRIPTION を実行するために、ユーザに対してデータベースへのCREATE 権限を許可する
|
pg_monitor
、pg_read_all_settings
、pg_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_files
、pg_write_server_files
、pg_execute_server_program
ロールは、信頼はできるが非スーパーユーザであるロールがデータベースを実行しているユーザとしてデータベースサーバ上でファイルにアクセスしたりプログラムを実行したりすることを、管理者が許可できるようにすること意図しています。
これらのロールはサーバファイルシステムの任意のファイルにアクセスできますので、ファイルに直接アクセスする時にはデータベースレベルの権限検査はすべて行なわれず、スーパーユーザレベルのアクセスを得るのに使えます。ですので、これらのロールをユーザに許可する時には注意すべきです。
これらのロールを許可する場合は、必要な場合にのみ、これらのロールは機密情報へのアクセス権を与えることを理解して、使用されるように注意する必要があります。
管理者はGRANT
コマンドを使って、ユーザにこれらのロールへのアクセスを許可できます。例えば、
GRANT pg_signal_backend TO admin_user;