PostgreSQLに新しいユーザ(ロール)を作成する

PostgreSQL

概要

PostgreSQLに新しいユーザアカウント(ロール)を作成する方法についてです。
PostgreSQLでは、ユーザとロールは同一です。
ユーザを作成するには、主に以下の2つの方法があります。

  • コマンドプロンプト等でcreateuserコマンドを実行
  • psqlなどでCREATE USERコマンド(SQLコマンド)を実行

今回は以下の環境で確認しています。

OSWindows 10 64bit
バージョンPostgreSQL 16.4

それでは、2つの方法それぞれについて説明します。

createuserコマンド

createuserの構文は以下の通りです。

createuser [接続パラメータ...] [オプション...] ユーザ名

ユーザ名は新しく作成するユーザの名前です。この名前は存在するすべてのロールと異なる名前でなければなりません。
また、新しいユーザを作成できるのは、スーパーユーザとCREATEROLE権限を持つユーザのみのため、それらのユーザで接続しなければなりません。

主なオプションは以下の通りです。

オプション内容
-d
–createdb
新しいユーザに対してデータベースの作成を許可します。
-D
–no-createdb
新しいユーザに対してデータベースの作成を禁止します。(デフォルト)
-l
–login
新しいユーザに対してログインを許可します。
(デフォルト)
-L
–no-login
新しいユーザに対してログインを禁止します。
-P
–pwprompt
新しいユーザのパスワードのプロンプトを表示します。(パスワードの設定)
-r
–createrole
新しいユーザに対して、他のロールの作成・変更・削除等を許可します。
-R
–no-createrole
新しいユーザに対して新しいロールの作成を禁止します。(デフォルト)
-s
–superuser
新しいユーザはスーパーユーザになります。
-S
–no-superuser
新しいユーザはスーパーユーザにはなりません。
(デフォルト)
-v
–version
createuserのバージョンを表示し終了します。
–replication新しいユーザはREPLICATION権限を持ちます。
–no-replication新しいユーザはREPLICATION権限を持ちません。(デフォルト)
-?
–help
createuserコマンドのコマンドライン引数の使用方法を表示し終了します。

主な接続オプションは以下の通りです。

接続パラメータ内容
-h host
–host=host
PostgreSQLサーバが稼働しているホスト名・IPアドレスを指定する。
-p port
–port=port
サーバが接続を監視するTCPポート番号を指定する。
-U username
–username=username
接続に使用するユーザ名を指定する。(作成するユーザ名ではない)

ユーザ名をtestuser1、データベース作成を許可した場合のコマンドの例です。

createuser -U postgres --createdb --no-superuser --no-createrole --no-replication -P testuser1

実行すると以下のようになります。

createuserコマンド

最初と2回目のパスワード入力は、新しいユーザのパスワード設定のための入力です。
最後のパスワードはスーパーユーザである-Uオプションで指定したpostgresユーザのパスワード入力です。

createuserコマンドの詳細は、公式ドキュメントを参照してください。

CREATE USER(SQL)

SQLのCREATE USERは以下のような構文となります。

CREATE USER ユーザ名 [ [WITH] option [...] ]

ユーザ名は新しく作成するユーザの名前です。この名前は存在するすべてのロールと異なる名前でなければなりません。
CREATE USERはCREATE ROLEの別名です。そのため実際にはCREATE ROLEが実行されます。

主に以下のオプションがあります。

オプション内容
SUPERUSER
NOSUPERUSER
新しいユーザがスーパーユーザとなるかどうかを指定します。
デフォルトはNOSUPERUSERです。
CREATEDB
NOCREATEDB
データベースの作成を許可するか指定します。
デフォルトはNOCREATEDBです。
CREATEROLE
NOCREATEROLE
他のロールを作成・変更・削除等を許可するか指定します。
デフォルトはNOCREATEROLEです。
LOGIN
NOLOGIN
ログイン可能かどうか指定します。
デフォルトはNOLOGINですが、CREATE USERで実行した場合はLOGINとなります。
REPLICATION
NOREPLICATION
REPLICATION権限を持つか指定します。
デフォルトはNOREPLICATIONです。
[ENCRYPTED] PASSWORD ‘passwordパスワードを指定します。
VALID UNTIL ‘timestamp’パスワードが無効となる日時を指定します。
省略するとパスワードは永遠に有効となります。

ユーザ名をtestuser2、データベース作成を許可した場合の例です。

CREATE USER testuser2 WITH CREATEDB NOSUPERUSER NOCREATEROLE NOREPLICATION PASSWORD 'password' ;

psqlにてスーパーユーザで接続後、SQLを実行すると以下のようになります。

CREATE USER

CREATE USERの詳細は公式のドキュメントを参照してください。
CREATE ROLEの公式のドキュメントはこちらです。

終わりに

以上でユーザ作成についての説明は終了です。
psqlでユーザ一覧を確認すると、データベース作成可能な状態でtestuser1とtestuser2が作成されています。

psql ユーザ一覧
タイトルとURLをコピーしました