問題
- DBを作成しようとしていたが、
$ psql -U postgres
でpostgresに接続できない
こうなる
[vagrant@localhost hoge]$ psql -U postgres
psql: FATAL: Peer authentication failed for user "postgres"
解決策
- pg_hba.confをいじって、trust認証に変更
- postgresql再起動後、接続できるようになった!
before
# "local" is for Unix domain socket connections only
local all all peer
peer → trust
after
# "local" is for Unix domain socket connections only
local all all trust
その他
-
pg_hba.conf
は、/var/lib/pgsql/data
にある(はず。defaultでは。) - 解決に参考にしたページ: PostgreSQLのPeer認証と他の認証方法への変更
-
trust認証
についてはよくわかっていません
以下、追記(2018.10.9)
trust認証について
trust認証が指定されるとPostgreSQLは、サーバに接続できる全ての人に対して (データベーススーパーユーザさえも)その人が指定する任意のデータベースユーザ名としてのアクセス権限が付与されていると想定します。
trust認証はユーザが1人のみのワークステーション上でローカル接続を行う場合は適切であると同時に非常に便利です。 複数ユーザが存在するマシン上では一般的に適切ではありません。
今回は自分の開発環境における話だったのでtrust認証にしています。
Peer認証について
Peer認証とは、カーネルからクライアント上のシステムユーザ名を取得し、PostgreSQLデータベースユーザと同一である場合のみ接続が許可される仕組みです。 つまり、Postgresql内のユーザーとUNIXユーザで、ユーザー名が一致してさえいれば認証情報なしでログイン出来てしまう仕組みです。
今回接続できなかった理由です。
unixユーザ vagrant
としてPostgresqlに接続しようとしていましたが、Postgresql内のユーザに vagrant
が存在していなかったため接続できなかったと考えられます。