Ubuntu 15.10にPostgreSQL 9.4をインストールしました。
createuser -P myuser
でユーザーを作成しましたcreatedb -O myuser mydatabase
でデータベースを作成しましたpg_hba.conf
を編集してlocal mydatabase myuser md5
を追加しました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に接続するにはどうすればよいですか?
数日前のフレッシュインストールでは、私のpg_hba.conf
の2行目は
local all all peer
これは接続の試行を失敗させるものだと思います
ここではルールの順序が重要です。アクセス方法、ユーザー名、データベース名、ソースIP範囲に一致する最初のルールが考慮されます。失敗した場合、2回目の試行は行われないため、接続の試行は失敗する可能性があります。または、 documentation のように:
「フォールスルー」または「バックアップ」はありません。1つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。
解決策は簡単です。peer
認証を使用する予定がない場合は上記の行を削除するか、特定のルールをこのルールの上に移動します。
最初に、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を入力します。