web-dev-qa-db-ja.com

psql:致命的:ユーザーのピア認証に失敗しました

Ubuntu 15.10にPostgreSQL 9.4をインストールしました。

  1. createuser -P myuserでユーザーを作成しました
  2. createdb -O myuser mydatabaseでデータベースを作成しました
  3. pg_hba.confを編集してlocal mydatabase myuser md5を追加しました
  4. Sudo service postgresql restartでPostgreSQLを再起動しました

ユーザーmyuserはPostgresSQLユーザーのみで、Ubuntuにはユーザーアカウントがありません。

psql -W mydatabase myuserでデータベースに接続しようとすると、psql: FATAL: Peer authentication failed for user "myuser"で失敗します。

PostgreSQLが実行中…

● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

...そしてリスニング。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

ユーザーmyuserをデータベースmydatabaseに接続するにはどうすればよいですか?

12
Daniel

数日前のフレッシュインストールでは、私のpg_hba.confの2行目は

local   all             all              peer

これは接続の試行を失敗させるものだと思います

ここではルールの順序が重要です。アクセス方法、ユーザー名、データベース名、ソースIP範囲に一致する最初のルールが考慮されます。失敗した場合、2回目の試行は行われないため、接続の試行は失敗する可能性があります。または、 documentation のように:

「フォールスルー」または「バックアップ」はありません。1つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。

解決策は簡単です。peer認証を使用する予定がない場合は上記の行を削除するか、特定のルールをこのルールの上に移動します。

15
dezso

最初に、pg_hba.confのmyuserユーザーにアクセス権を付与していることを確認します。例えば:

# IPv4 local connections:
Host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
Host    all             all             ::1/128                 md5

または、次のIPV4(および使用する場合はIPv6)に対する他の権限行:TYPE DATABASE USER ADDRESS METHOD

このチェックの後、次のようにpsqlを実行します。

psql -h localhost -U myuser mydatabase

次に、要求されたプロンプトで、ユーザーのパスワードmyuserを入力します。

3
Alvaro Neto