-
2024-09-30 PostgreSQL
PostgreSQLのロールとユーザの違い
PostgreSQL のロールとユーザ
PostgreSQL にはロールという概念があり、その一部としてユーザという概念があります。
本記事より以降、何回かに分けて、PostgreSQL のロールとユーザについて説明を行う予定です。今回はロールとユーザについての説明を行います。
まずは PostgreSQL 文書の説明を確認
ロールについては、PostgreSQL 文書の CREATE ROLE コマンドのページに説明がありますので、下記に引用します。
【 PostgreSQL 16.4文書 - CREATE ROLE - 】
https://www.postgresql.jp/document/16/html/sql-createrole.html
ロールとは、データベースオブジェクトを所有することができ、データベース権限を持つことができる実体のことです。 ロールは、使用状況に応じて「ユーザ」、「グループ」、もしくは、その両方であるとみなすことができます。
上記の説明のとおり、ロールは使用状況に応じてユーザとみなされます。では、どのような場合に、ロールはユーザとみなされるのかというと、これも同じページの LOGIN 属性の項目の説明に記載されています。
該当部分を下記に引用します。
LOGIN属性を持つロールはユーザとみなすことができます。 この属性を持たないロールは、データベース権限を管理する際に有用ですが、普通の意味ではユーザとはいえません。
データベースにログインできるロールはユーザといえる、ログインできないロールはユーザといえない、とのことです。ちなみに「グループ」という表現は、PostgreSQL ではあまり使われている印象はないです。
また、PostgreSQL にはユーザを作成するためのコマンドとして CREATE USER コマンドも用意されています。
PostgreSQL 文書の CREATE USER コマンドの説明は短いので、下記に全文を引用します。
【 PostgreSQL 16.4文書 - CREATE USER - 】
https://www.postgresql.jp/document/16/html/sql-createuser.html
CREATE USERはCREATE ROLEの別名になりました。 唯一の違いは、CREATE USERという名前でコマンドが呼び出されると、デフォルトでLOGINになり、CREATE ROLEという名前でコマンドが呼び出されると、デフォルトでNOLOGINとなる点です。
CREATE ROLE コマンドと CREATE USER コマンドの使い分け
CREATE ROLE コマンドと CREATE USER コマンドの相違点は、デフォルトが LOGIN か NOLOGIN かという違いだけ、と説明されていました。
ロールを作成する場合には、CREATE ROLE コマンドを使用し、ユーザを作成する場合には CREATE USER コマンドを使用する、というのが厳密な運用方法なのかもしれませんが、ロールもユーザも CREATE ROLE コマンド(または CREATE USER コマンド)で作成する、という運用方法も分かりやすいと思います。
いずれにしても、どちらの運用方法が優れていると一概には言えません。最低限、どういった方法でロールとユーザを作成するのかを事前に決定、統一しておくことが推奨となります。
ロールとユーザの使い分け
ロールとユーザは、その名の通り「ロール = 役割」、「ユーザ = 利用者」という役割を持ちます。CREATE ROLE コマンドと CREATE USER コマンドは、どちらか一方のみを利用するように運用しても特に問題ないですが、ロールとユーザについては、明確に使い分けることが推奨となります。
ロールは、アクセス管理や権限をまとめた基本的な単位として扱い、ユーザに対してロールを付与します。ユーザは、利用者というようにクライアントが PostgreSQL に接続する際に利用します。
ユーザに対しても権限を付与することが可能ですが、基本的にはロールに対して権限を付与し、そのロールをユーザに付与することが推奨となります。
※権限やロールの付与については、次回以降の記事で説明できればと思います。
まとめ
以上が PostgreSQL におけるロールとユーザの違いとなります。
次回以降もロール関連に関する記事を作成する予定です。具体的にはロールの確認方法や定義済みロール、PUBLIC ロールなどについての解説などを予定しています。