PleskでPostgreSQLのユーザーを作るとpgsqlで認証が通らない?


サイト移転作業で躓いたことの2件目です。まぁ、本来であればこちらが1件目なんですが…

先にも書いた通り移転先のサーバーではPleskを使っています。で、Pleskからデータベースを作成するわけなのですが、今回問題が発覚したのは移転元のPostgreSQLでは何故か文字コードがEUC_JPだったんですね。移転先は普通に作るとUTF-8になります。さて困った。このままでは移行できない!ということでいろいろ調べましたら、「Pleskでデータベースを作成した後に、コマンドラインからDROP DATABASEしてCREATE DATABASEしろ」という情報が見つかりました。ちなみに、Pleskで作ったユーザーではデータベースの削除・作成権限がないのでPleskのユーザーで実行する必要があります。

dropdb -h localhost -U ユーザー名 -W データベース名

で、パスワードを聞かれるので入力するのですが

Ident authentication failed for user "ユーザー名"

になって認証が通りません。はて?ユーザー名もパスワードも合っているのに何故?実は、デフォルトの設定が曲者でした。/var/lib/pgsql/data/pg_hba.conf を覗いてみます。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

となっているんですね。peerもidentもほぼ同じ意味(細かく言えば違います)でUNIXユーザーで認証しまっせ!っていう意味だそうです。いやいや、作ったユーザーはPostgreSQLにしかないから!というわけで書き換えます。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

trustはUNIXユーザーとPostgreSQLのユーザーが異なっていても認証します!という意味だそうです。ちなみに、local行だけ書き換えればよいという記事も多いのですが、こちらの環境ではhost行も書き換えないとダメでした。書き換えた後にPostgreSQLを再起動してOKになりました。

早速、データベースの再作成をしてみます。

dropdb -h localhost -U ユーザー名 -W データベース名
createdb -T template0 -h localhost -U ユーザー名 -W -E EUC_JP --locale=C データベース名

で再作成は完了です。めでたくEUC_JPなデータベースの出来上がりです。ちなみに、–locale=Cを付けないと

encoding "EUC_JP" does not match locale "en_US.UTF-8"

とエラーになります。また、-T template0を付けないと

new encoding (EUC_JP) is incompatible with the encoding of the template database (UTF8)

とエラーになります。ここら辺も、どちらのオプションも付けてない情報があるので注意が必要です。

ではでは、お役に立てますように。


コメントを残す

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