PostgreSQLの標準では、認証にIdent認証を利用している場合がある。これは、DBに接続させるユーザとOSのユーザ名を一致させなければならないというものである。
クライアントの認証は、pg_hba.conf の中で定義してある。
# /var/lib/pgsql/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
local all all identの最後の部分が認証方式である。上記の例ではident認証になっている。Ident認証とは、下記の通り。
クライアントのオペレーティングシステムにおけるユーザ名を (TCP/IP 接続ではクライアント上の ident サーバに尋ねることで、ローカル接続ではオペレーティングシステムから) 取得し、ident キーワードに続けて指定されたマップを調べることで、そのユーザが要求されたデータベースのユーザとして接続を許可されているかどうかを検査します。
PostgreSQLでは、標準設定ではIdent認証を利用している。どうやら、DBのユーザ名とOSのユーザ名を一致させる必要があるようだ。
PostgreSQLユーザアカウントでは存在するが、OSに存在しないユーザでPostgreSQLサーバへアクセスしても、Ident認証では意味が無いという訳だ。
では、どうすれば良いのか? 解決方法は2通り。1つ目は、認証方式をpasswordやmd5に変更する。こうすれば、DBユーザと同名のユーザがOS上に無くても良い。
# /var/lib/pgsql/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all password
# IPv4 local connections: