ダウンロード

PostgreSQLのpg_hba.confって何者?

PostgreSQLサーバをシステムに組み込む上でpg_hba.confの中身を理解しなければならなかったのでメモ。

このファイルを正しく設定しておかないとPostgreSQLに接続できませんよね。

確認環境:
AWS Amazon-Linux 2015.09 / PostgreSQL ver9.2

上の環境ならばファイルはここ→「/var/lib/pgsql9/data/pg_hba.conf」
基本的にpg_hba.confは以下の情報を持つ。
1.どのデータベースが
2.どのユーザを使って
3.どこからアクセスされた場合に
4.どの認証方式を使うか

まあ、私みたいな初心者がややこしいのが4.の部分なわけで。
当方の都合上、現段階ではpeerとident、そしてmd5のみを対象とします。
※ldapとか使えるようになりたいぃぃぃ。ヽ(´∞`)ノ

このファイルに記述されるレコードは先頭のhost, localという記述子によって大きく2つに分かれます。
※hostsslとかhostnosslとかもあるけどここでは取り上げません。
local・・・Linuxとかのローカルマシン上からpsql接続した場合に採用されるレコード
host・・・ローカルまたはネットワークのマシン上からTCP/IP接続される場合に採用されるレコード。PHPなどからpg_connectする場合なんかもこちらが採用されますね。

例:

この場合、psql接続でdatabase1にuser1で接続した場合にはpeer認証となります。
peer認証とはLinuxにログインしているユーザで認証が行われます。なので、psql接続する前に同名のLinuxユーザでログインしておく必要があります。
もう一方のhostのレコードは127.0.0.1/32(このIPはローカルマシンを指します)からアクセスされた場合にident認証が採用されるという意味です。これはLinux上でuser1でログインしておく必要はないですが、Linuxユーザとしては同名のユーザが存在している必要があります。

PostgreSQL上にしか存在しないユーザ(またはグループ)を指定する場合はmd5を使います。md5はPostgreSQLのパスワードを送信する際にmd5暗号化が適用。md5の部分をpasswordって指定するとパスワードが平文として送信されます。
・・・あぶないっ!!Σ(゚д゚;)

ローカルマシンではなく、ネットワーク上のマシンからアクセスさせたい場合には127.0.0.1の部分を書きなおせばよいです。
たとえば172.16.10.*に属するマシンを対象とする場合には下記のようになります。

database1とかuser1とかの部分はしばしばallで記述されます。
これは言わずもがな全てのデータベースとかユーザが対象という意味です。

では、基本的にはident認証を使いたいけど、このユーザだけはPostgreSQL上のユーザだからmd5を指定したい、って場合は?サービス提供側としては知っておきたいところですw

認証の順番はこのファイルの記述順で上から順に優先されます。
なのでたとえばmashpoteってユーザはローカル接続の場合にmd5認証、その他のすべてのユーザはident認証にしたいって場合には以下のように順番に書きます。

ちなみに認証方式でtrustを指定するとパスワードなしでも接続できちゃうので使いどころに気をつけてください。
※私は使いません。(`・ω・´) キリッ

参考(PostgreSQL本家サイト)
https://www.postgresql.jp/document/9.3/html/auth-pg-hba-conf.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です