はじめに
コマンドプロンプトからpsql
を起動する際にはパスワードの入力が求められます。
自身で実行する分には問題ありませんが、バッチ等で自動処理させたい場合にパスワード入力は邪魔となります。
そこで、パスワード入力を省略する方法を調査しました。
環境
- Windows 10 Home
概要
サーバーサイドで対処する方法とクライアントサイドで対処する方法が存在します。
サーバーサイドはローカルホスト用、クライアントサイドは複数ユーザ用のように思います。
サーバーサイド
- trust認証設定
クライアントサイド
- パスワードファイル配置
- 環境変数の設定(非推奨)
trust認証
サーバーサイドにて認証方式をtrustに設定すれば、指定した範囲においてアクセス許可をすることになります。
ただし、サーバーに接続する人全員に適用されるためローカルホスト内に留めるほうが安全と思います。
まずはユーザpostgres
にログインしようとするとパスワードが要求されることを確認します。
C:\postgresql-binaries\postgresql-13\pgsql-13.7-1>bin\psql -h localhost -p 5432 -U postgres -d postgres
ユーザ postgres のパスワード:
psql (13.7)
"help"でヘルプを表示します。
postgres=#
確認後、ログアウトします。
trust認証に設定するにはサーバーサイドのpg_hba.conf
を編集します。
pg_hba.conf
はPostgreSQLをインストールした場所のdata
ディレクトリに格納されています。
バージョンにもよりますが、pg_hba.conf
の下のほうの表記は以下のようになっています。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all scram-sha-256
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
ユーザpostgres
に対してtrust認証設定にしていきます。
今回はWindowsなので、IPv4とIPv6にMETHOD欄をtrustとする行を追加します。
上から順番に設定が読み込まれるため、個別指定の行を上部に設定します。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host postgres postgres 127.0.0.1/32 trust
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host postgres postgres ::1/128 trust
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all scram-sha-256
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
このpg_hba.conf
を保存した状態でユーザpostgres
にログインしようとすると、パスワード要求無しにログイン出来ます。
C:\postgresql-binaries\postgresql-13\pgsql-13.7-1>bin\psql -h localhost -p 5432 -U postgres -d postgres
psql (13.7)
"help"でヘルプを表示します。
postgres=#
これがサーバーサイドで対処する場合の設定方法になります。
パスワードファイル配置
クライアントサイドではパスワードの情報を記載したファイルを特定の場所に配置しておくことで自動認証が行われます。
trust認証の設定は削除しておきます。
まず、pgpass.conf
ファイルを作成し、
- IPアドレス
- ポート番号
- データベース名
- ユーザ名
- パスワード
を記載します。
こちらに関しても上から順番に設定されるため個別設定は上部に記載し保存します。
#IPアドレス:ポート番号:データベース名:ユーザ名:パスワード
localhost:5432:postgres:postgres:password
#複数行を定義することも可能
localhost:5433:postgres:postgres:password
#項目内の「:」「\」は、「\」でのエスケープが必要
localhost:5434:postgres:postgres:pass\:\\word
#ワイルドカードも使用可能(ただし定義した順にパスワードが確定するので下のほうで使用)
*:*:postgres:postgres:password
Windowsでは、このpgpass.conf
を%APPDATA%\postgresql\pgpass.conf
に配置します。
%APPDATA%
に関しては個人によって多少異なりますがコマンドプロンプト上で表示できます。
以下は一例です。
C:\>echo %APPDATA%
C:\Users\userName\AppData\Roaming
この場合はC:\Users\userName\AppData\Roaming\postgresql\pgpass.conf
のように配置します。
pgpass.conf
ファイルを配置した状態でログインしようとすると、パスワード要求無しにログイン出来ます。
C:\postgresql-binaries\postgresql-13\pgsql-13.7-1>bin\psql -h localhost -p 5432 -U postgres -d postgres
psql (13.7)
"help"でヘルプを表示します。
postgres=#
これがクライアントサイドで対処する場合の基本的な設定方法になります。
環境変数の設定(非推奨)
環境変数を使用する方法に関しては、他ユーザから環境変数を見られる等セキュリティの観点から推奨されていません。
そのため基本的には上記のpgpass.conf
を用意する方法が推奨されます。
メモ程度に記載しますが、psql
ログイン時には環境変数PGPASSWORD
が設定されていればパスワード認証の際に使用されます。
psql
コマンドの直前に設定しておくと簡単なテスト実行には使用できそうです。
C:\postgresql-binaries\postgresql-13\pgsql-13.7-1>SET PGPASSWORD=password
C:\postgresql-binaries\postgresql-13\pgsql-13.7-1>bin\psql -h localhost -p 5432 -U postgres -d postgres
psql (13.7)
"help"でヘルプを表示します。
postgres=#