Pesan kesalahan Postgres: FATAL: Otentikasi identitas gagal untuk pengguna "..."

26

Katakan Anda melihat pesan ini:

FATAL:  Ident authentication failed for user "..."

Apa penyebab dari pesan kesalahan ini?

Steve Bennett
sumber

Jawaban:

36

Ini berarti Postgres berusaha untuk mengotentikasi pengguna menggunakan protokol Ident, dan tidak bisa. Ident auth berfungsi seperti ini:

  • Anda memiliki peran basis data 'foo' pada basis data 'db'
  • pg_hba.confFile Anda (dalam /etc/postgres-something/main) mendefinisikan 'Ident' sebagai protokol untuk terhubung ke database dbuntuk pengguna yang terhubung dari host tertentu
  • Nama pengguna unix yang membuat koneksi adalah 'foo'
  • Ident server yang berjalan di mesin yang disambungkan pengguna mengkonfirmasi bahwa nama pengguna mereka benar-benar 'foo'

Kemungkinan penyebab dan solusi:

  1. Tidak ada server Ident yang berjalan pada mesin yang Anda coba sambungkan. Uji ini dengan mencoba menyambungkannya pada port 113. Jika itu gagal, instal server Ident (misalnya, sudo apt-get install oidentd).
  2. Ada server Ident, tetapi tidak ada peran basis data yang cocok dengan nama yang Anda coba sambungkan ('foo' dalam contoh di atas). Jadi buat itu dengan menghubungkan entah bagaimana ke database dengan hak superuser dan lakukan CREATE ROLE foo. Atau tambahkan entri ke /etc/postgresql/.../main/pg_ident.conf.
  3. Mungkin nama pengguna shell tidak cocok dengan peran basis data. Anda mungkin dapat menguji ini dengan menghubungkan ke server Ident saat koneksi sedang berlangsung, dan melewati nomor port yang tepat.
  4. Mungkin Anda sebenarnya ingin terhubung dengan kata sandi , bukan Ident. Edit pg_hba.conffile dengan tepat. Misalnya, ubah:

    host all all 127.0.0.1/32 ident
    

    untuk

    host all all 127.0.0.1/32 md5
    
Steve Bennett
sumber
2
Untuk fedora, file ada di/var/lib/psql/data
Anwar
Saya tidak mengira ada orang yang mau menjawab mengapa postgres menggunakan 'ident' sebagai login default?
icc97
Karena itu masuk akal 20 tahun yang lalu dan tidak ada yang berubah di * nix? :)
Steve Bennett
@ icc97, tidak ada dalam jawaban ini yang menunjukkan bahwa "ident" adalah login default untuk Postgres; dari mana Anda mendapatkan ide itu? Sejauh yang saya tahu nama peran superuser default di cluster Postgres adalah "postgres".
Wildcard
9

Tidak yakin tentang penyebab, tapi ini tetap untukku:

di pg_hba.conf

ubah ke ini:

tuan semua semua 127.0.0.1/32 md5

Kesalahan tepat: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

jacktrades
sumber
1
mengubah "ident" -> "md5" melakukannya untuk saya
webwesen
3

Pada CentOS, tambahkan baris berikut ke /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

Dan mengomentari entri lainnya.

Tentu saja, pengaturan ini tidak aman, tetapi jika Anda hanya mengacaukan pada pengembangan VM seperti saya maka itu mungkin baik-baik saja ...

XåpplI'-I0llwlg'I -
sumber
0

Jika Anda belum mencoba ini, tinjau file pg_hba.conf Anda. Ini akan dinamai sesuatu seperti /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); Anda mungkin harus menggunakan 'find / -name pg_hba.conf' untuk menemukannya.

Di bagian bawah file, ubah nilai 'METHOD' menjadi 'trust' untuk pengujian lokal (lihat dokumen postgres untuk informasi lengkap). Nyalakan ulang mesin untuk memastikan semuanya mulai bersih dan params baru dibaca.

Semoga ini akan menyembuhkan kesengsaraan Anda. Ini memecahkan masalah saya pada Fedora 20 dengan PostgreSQL 9.3.

Alan Thompson
sumber
Tidak perlu me-reboot seluruh mesin Anda ketika mengubah konfigurasi PostgreSQL. Alih-alih, coba gunakan pg_ctl reloaddari konsol, atau SELECT pg_reload_conf();saat mengeksekusi SQL sebagai pengguna istimewa.
benjwadams