PostgreSQLを使ったときに、パスワード認証の設定がなかなできずに詰まったので書きました。
筆者の環境
- psql (PostgreSQL) 12.2
- macOS Catalina 10.15.3
1、ROLE(ユーザー)のパスワードを設定する
各ユーザーのパスワードを設定する。
新たにユーザーを作成する場合
user01
を新規ユーザーとして作成、パスワードはpass
とする。
postgres=> CREATE ROLE user01 WITH LOGIN PASSWORD 'pass';
既存のユーザーにパスワードを付与する場合
既存ユーザーuser02
に対してパスワードpass
を設定する。
postgres=> ALTER ROLE user02 WITH PASSWORD 'pass';
2、pg_hba.conf(設定ファイル)を編集する
設定ファイルの認証方式を編集して、パスワードを聞かれるようにする。
まず、ファイルの位置を検索
※もっと良いコマンドもあると思う
sudo find / -name pg_hba.conf
検索できたらファイルのパスを指定してエディタで設定ファイルを確認する。
私の環境だと下記のようになっていた。
一番右側のMETHOD
の部分が認証方式。現状だと全てtrust
になってあり、無条件でログインできてしまう。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
認証方式について
- trust 全て接続を無条件で許可する。パスワードや他の認証方式も適用されない。
- password クライアントに対して平文のパスワードを要求する。
- md5 クライアントに対して二重MD5ハッシュ化パスワードを要求する。
上記3種類以外にもあるが今回は割愛。
MTHOD
をtrust
からpassword
ormd5
にすればパスワードの認証を設定することができる。
下図は設定の一例
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all password
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 password
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all password
host replication all 127.0.0.1/32 password
host replication all ::1/128 password
記事の改善点、間違い等ありましたらぜひご指摘をお願いします。