psql: FATAL: Otentikasi rekan gagal untuk pengguna

12

Saya baru saja menginstal PostgreSQL 9.4 di Ubuntu 15.10.

  1. Saya membuat pengguna dengan createuser -P myuser
  2. Saya membuat basis data dengan createdb -O myuser mydatabase
  3. Saya mengedit pg_hba.confdan menambahkanlocal mydatabase myuser md5
  4. Saya memulai kembali PostgreSQL dengan sudo service postgresql restart

Pengguna myuser adalah pengguna PostgresSQL saja dan tidak memiliki akun pengguna di Ubuntu.

Ketika saya mencoba untuk terhubung ke database dengan psql -W mydatabase myusergagal psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL sedang berjalan ...

 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.

... dan mendengarkan.

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

Apa yang harus saya lakukan untuk terhubung dengan pengguna myuser ke database mydatabase ?

Daniel
sumber

Jawaban:

16

Dalam instalasi baru dari beberapa hari yang lalu, baris kedua saya pg_hba.confadalah

local   all             all              peer

Saya percaya ini adalah yang membuat upaya koneksi Anda gagal.

Urutan aturan penting di sini: yang pertama yang cocok dengan metode akses, nama pengguna, nama basis data, dan kisaran IP sumber akan dipertimbangkan. Jika gagal, maka tidak ada percobaan kedua, sehingga upaya koneksi kemungkinan akan gagal. Atau, seperti yang dinyatakan dalam dokumentasi :

Tidak ada "cadangan" atau "cadangan": jika satu catatan dipilih dan otentikasi gagal, catatan selanjutnya tidak dipertimbangkan. Jika tidak ada catatan yang cocok, akses ditolak.

Solusinya mudah: hapus baris di atas jika Anda tidak berencana untuk menggunakan peerotentikasi, atau pindahkan aturan spesifik Anda di atas yang ini.

dezso
sumber
Memindahkan garis berhasil.
Daniel
Bagaimana kita bisa menyimpan kata sandi dengan menggunakan authm 'md5' sehingga kita tidak perlu mengetiknya lagi dan lagi ...?
sk
3

Pertama ... periksa apakah Anda memiliki jalur yang mengizinkan pengguna myuser di pg_hba.conf. Sebagai contoh:

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

Atau jalur izin lainnya ke IPV4 (dan IPv6 jika Anda gunakan) dengan: TYPE DATABASE USER ADDRESS METHOD

Setelah pemeriksaan ini, jalankan psql sebagai berikut:

psql -h localhost -U myuser mydatabase

Dan kemudian, permintaan yang diminta, masukkan kata sandi pengguna pengguna.

Alvaro Neto
sumber
1
Dan tentu saja, hapus otentikasi rekan.
Alvaro Neto
Memiliki contoh yang saya perbarui untuk memungkinkan koneksi jarak jauh, alamat mendengarkan diatur ke '*'dan menambahkan host all all 0.0.0.0/0 md5aturan. Tidak harus menghapus autentikasi peer. Baru saja bekerja dengan -h localhostparam. Jawaban terbaik karena Anda kemungkinan besar tidak harus menyentuh konfigurasi pada instalasi stok.
Mark Carpenter Jr