用語集のすべての用語

ロールと権限

PostgreSQL のロールと権限の仕組みとは?

PostgreSQL では、ユーザーもグループもどちらもロールです。GRANT はオブジェクトに対する権限をロールに付与し、別のロールのメンバーであるロールは、そのロールの権限を使用できます。

PostgreSQL はロールによってアクセスを制御します。ロールはユーザー(LOGIN 属性を持つ)としても、グループとしても、その両方としても機能し、データベースオブジェクトを所有します。SELECT、INSERT、UPDATE、USAGE などの権限は、GRANT で特定のオブジェクトに対して付与し、REVOKE で取り消します。

あるロールを別のロールのメンバーにすると、そのロールの権限を使えるようになります。そのため、権限はグループロールに付与し、ログインロールをそれらのグループに追加するのが一般的なパターンです。ロールはデータベースごとではなく、データベースクラスタ全体に存在します。オブジェクトの所有者とスーパーユーザーはそのオブジェクトに対して何でもできるため、アプリケーション用のロールは所有者やスーパーユーザーとは分けておいてください。

例

この例では、reporting というグループロールと、それに所属する analyst というログインロールを作成し、グループに SELECT を付与します。has_table_privilege により、analyst がテーブルを読み取れるものの、挿入はできないことを確認します。

CREATE ROLE reporting NOLOGIN;
CREATE ROLE analyst LOGIN IN ROLE reporting;

CREATE TABLE revenue_daily (day date PRIMARY KEY, amount numeric);
GRANT SELECT ON revenue_daily TO reporting;

SELECT has_table_privilege('analyst', 'revenue_daily', 'SELECT') AS can_select,
       has_table_privilege('analyst', 'revenue_daily', 'INSERT') AS can_insert;

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語