今回はPostgreSQLにおける「ロール」と「ユーザ」について整理します。
■ロールとは
PostgreSQLではデータベースへのアクセス管理を「ロール」(役割)と呼ばれる概念で制御します。このロールはPostgreSQLにおいて一般的な「ユーザ」や「グループ」を兼ねる概念として機能します。
ロールはテーブルなどのデータベースオブジェクトを保有でき、別のロールにそれらへの権限も付与することができます。
ちなみにPostgreSQLのセットアップをすると「postgres」という名のロール(ユーザ)が自動作成されますが、「postgres」ロールはSUPERUSERとなっています。
■ロールとユーザの違い
多くの解説記事で「ロール」と「ユーザ」がほぼ同義という説明が見られるかと思います。ロールとユーザはほぼ同じで、唯一の違いとして、ロールにはLOGIN権限がなく、ユーザにはLOGIN権限があるという点があります。つまり、ユーザ=ロール+LOGIN権限ということです。
なぜログイン権限の有無のみで似たような概念があるかという理由が気になるかと思いますが、これは単純に同じ役割を持つユーザを複数必要とするときに役割を共有させるためと考えればすぐに理解できるかと思います。役割の共有をしなければ、3人同じ役割を持たせたいユーザを準備するとした際に細かなユーザの定義を間違えずに揃えないといけません。1つの役割を共有する形をとれば役割の内容を変更する場合も、役割の内容(定義)を変更すればよく、一人一人のユーザの設定を変えなくて済むからです。

■ロールの作成
以下はパスワード認証でログインする権限を付与したロールを作成する例です。
CREATE ROLE rolename WITH LOGIN PASSWORD 'mypassword';
■ロールの削除
DROP ROLE rolename;
■登録済ロールの確認
「rolname」は「rolename」ではないので注意してください。「rolcanlogin」は「t」(true)もしくは「f」(false)の値でログインできるか否かを示します。
SELECT rolname, rolcanlogin FROM pg_roles;

コメントを残す