読者です 読者をやめる 読者になる 読者になる

山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

【postgresql】 SQL Shell (psql) でパスワードの入力を不要にする方法

database PostgreSQL

Windowspostgresqlコマンドラインで操作する場合、インストールすると一緒についてくる SQL Shell を使用することがある。そのときサーバー・データベース名・ポート・ユーザ名・クライアントエンコーディングなどを入力する必要がある。

こんな感じ。

f:id:yyama1556:20161127145521p:plain

ただし、デフォルト表示されている内容で問題なければ Enter キーを押下していくだけで良い。

デフォルトの値を変更する方法は以下の記事を参考に。

yyama1556.hateblo.jp



下図の場合、 Enter を押せば、赤線で示した内容を入力したことになる。

f:id:yyama1556:20161127145946p:plain

だけど、最後の「ユーザ xx のパスワード:」と表示されている部分で、パスワードだけは入力しないといけない。これがメンドイ。

パスワードを入力しなくてすむように設定する

ソフトウェアのバージョンは次のとおり。

OS : Windows7
Postgresql : 9.5.3

一言で言えば「パスワードファイル」を作成して、所定の場所に置いておくだけだ。

このサイトの内容をわかりやすくまとめたい。

https://www.postgresql.jp/document/9.4/html/libpq-pgpass.html

パスワードファイルを置く場所

先ほどのサイトから引用。

Microsoft Windowsでは、このファイルの名前は%APPDATA%\postgresql\pgpass.conf(ここで%APPDATA%はユーザのプロファイル内のアプリケーションデータディレクトリ)です。

[%APPDATA%]ってどこ?って人は、コマンドプロンプトで [ set APPDATA ] と打ってみる。

f:id:yyama1556:20161127151547p:plain

私の場合、[ C:\Users\yyama\AppData\Roaming ]がそのフォルダにあたる。この下に[ postgresql ]というフォルダを作成する。

パスワードファイルの名前

さきほどの引用にもあるが Windows の場合、[ pgpass.conf ]というファイル名になる。 Linux の場合は「ユーザのホームディレクトリの.pgpassまたはPGPASSFILEで設定されるファイル」となっている。

ファイルの内容

ホスト名・ポート・データベース名・ユーザ名・パスワードをコロンで区切って書き込んでおく。

こんな感じ。最初に#がある行は、コメントとして無視される。

#hostname:port:database:username:password
localhost:5432:postgres:postgres:postgres

実際に試してみる

実際にファイルを作成してから、 SQL Shell を起動してみると、パスワードの入力が不要になっていることを確認できた。

f:id:yyama1556:20161127152801p:plain

複数ユーザのパスワードも管理する

パスワードファイルには複数行書き込むことができる。他のユーザや、postgresql内のほかのデータベースのパスワードも管理できる。

まずは[ new_user ]というユーザを作った。

f:id:yyama1556:20161127154510p:plain

そして、[ pgpass.conf ]ファイルに1行追記し、以下のように修正した。

#hostname:port:database:username:password
localhost:5432:postgres:postgres:postgres
localhost:5432:postgres:new_user:pass1

そうすると[ new_user ]でログインする際にも、パスワードの入力は不要になった。

f:id:yyama1556:20161127154804p:plain

ワイルドカードも使えるよ!

例えば、先ほど追加したユーザ[ new_user ]のパスワードがユーザ[ postgres ]と同じ[ postgres ]だったとする。その場合、ユーザにかかわらずパスワードは[ postgres ]で良いことになる。

その際には、[ pgpass.conf ]ファイルのユーザ名のところに[ * ]をセットすれば、1行で書いても OK だ。

#hostname:port:database:username:password
localhost:5432:postgres:*:postgres


以上、開発時、パスワード入力のひと手間を不要にする方法をメモした。当たり前だが、本番環境でこのような設定を行ってはいけません!

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

PostgreSQL全機能バイブル

PostgreSQL全機能バイブル

PostgreSQL徹底入門 第3版

PostgreSQL徹底入門 第3版