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

PostgreSQLの認証方式について

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:

2つ目は、ユーザ名マップを利用する。こちらは試していないので割愛。

参考: