psql: FATAL: Otentikasi identitas gagal untuk "postgres" pengguna

372

Saya telah menginstal PostgreSQL dan pgAdminIII pada kotak Ubuntu Karmic saya.

Saya berhasil menggunakan pgAdminIII (mis. Terhubung / masuk), namun ketika saya mencoba masuk ke server menggunakan nama pengguna / pwd yang sama pada baris perintah (menggunakan psql), saya mendapatkan kesalahan:

psql: FATAL:  Ident authentication failed for user "postgres"

Adakah yang sekarang tahu bagaimana mengatasi masalah ini?

morf
sumber
Posting stackoverflow ini bekerja untuk saya: stackoverflow.com/a/18664239/2110769
Andrea Araldo

Jawaban:

194

Apakah Anda mengatur pengaturan yang tepat di pg_hba.conf?

Lihat https://help.ubuntu.com/stable/serverguide/postgresql.html cara melakukannya.

Frank Heikens
sumber
36
Ini tidak berhasil untuk saya. Saya menghabiskan waktu berjam-jam untuk itu! Yang ingin saya lakukan adalah menjalankan perintah psql di terminal saya. Apa yang saya perlukan untuk membuat file terlihat seperti melakukan ini ??
Sean
54
@SeanA Anda membutuhkan sesuatu seperti 'sudo -u postgres psql'
JLarky
8
Jangan lupa untuk ';' di akhir setiap pernyataan tentang psql. Kedengarannya konyol tapi itu terjadi hehe.
omrsin
42
@ Robert: "postgresql adalah db yang paling tidak ramah bagi pengguna"? Coba Oracle suatu hari untuk mendapatkan perspektif ... :)
mivk
5
Bagi mereka yang menggunakan rails, saya harus mengatur pg_hba.conf, dan mengubah 'ident' menjadi 'password'. Mengubahnya menjadi kepercayaan tidak berhasil.
Abe Petrillo
412

Langkah-langkah berikut berfungsi untuk pemasangan baru postgres 9.1 di Ubuntu 12.04. (Bekerja untuk postgres 9.3.9 juga di Ubuntu 14.04.)

Secara default, postgres membuat pengguna bernama 'postgres'. Kami masuk sebagai dia, dan memberinya kata sandi.

$ sudo -u postgres psql
\password
Enter password: ...
...

Logout psqldengan mengetik \qatau ctrl+d. Kemudian kita terhubung sebagai 'postgres'. The -h localhostBagian penting : itu memberitahu psqlklien bahwa kita ingin menghubungkan menggunakan koneksi TCP (yang dikonfigurasi untuk menggunakan otentikasi password), dan bukan oleh koneksi PEER (yang tidak peduli tentang password).

$ psql -U postgres -h localhost
Manav
sumber
13
Jika Anda mengatur, PGHOST=localhostAnda tidak perlu menentukan -hopsi setiap kali. Ini juga berfungsi dengan pg_*perintah lain seperti pg_dump.
Sameer
1
Itu didokumentasikan di sini: help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia
2
Ini diperlukan untuk mengaktifkan instalasi Mediawiki di Debian dengan PostgreSQL.
mivk
2 tahun kemudian, dan saya perlu melakukan ini pada Mac juga.
Manav
1
buruk karena ada masalah keamanan, lihat di sini: serverfault.com/questions/110154/...
Erdinc Ay
161

Mengedit file /etc/postgresql/8.4/main/pg_hba.confdan mengganti identatau peeroleh salah satu md5atau trust, tergantung pada apakah Anda ingin meminta password pada komputer Anda sendiri atau tidak. Kemudian muat ulang file konfigurasi dengan:

/etc/init.d/postgresql reload
Danny Milosavljevic
sumber
4
satu perintah restart postgresql: /etc/init.d/postgresql restart
Tyler Long
14
Mengapa memulai ulang saat memuat ulang adalah yang Anda butuhkan?
Frank Heikens
Dalam hal ini: "/etc/init.d/postgresql-8.4 memuat ulang"
shaytac
1
yang ini bekerja untuk saya. Perubahan dari peer ke md5 sudah cukup.
Jonatas CD
1
OK, saya noob postgresql, tapi saya harus melaporkan bahwa hanya restartberfungsi untuk saya, tidak reload--- setelah perubahan ke /etc/postgresql/9.5/main/pg_hba.conf(berubah peermenjadi trust).
Mike O'Connor
91

Anda mendapatkan kesalahan ini karena Anda gagal otentikasi klien. Berdasarkan pesan kesalahan, Anda mungkin memiliki konfigurasi postgres default, yang menetapkan metode otentikasi klien ke "IDENT" untuk semua koneksi PostgreSQL.

Anda pasti harus membaca bagian 19.1 Otentikasi Klien dalam manual PostgreSQL untuk lebih memahami pengaturan otentikasi yang tersedia (untuk setiap catatan di pg_hba.conf ), tetapi di sini ada cuplikan yang relevan untuk membantu masalah yang Anda hadapi (dari versi 9.5 manual ):

kepercayaan

Biarkan koneksi tanpa syarat. Metode ini memungkinkan siapa saja yang dapat terhubung ke server database PostgreSQL untuk masuk sebagai pengguna PostgreSQL apa pun yang mereka inginkan, tanpa perlu kata sandi atau otentikasi lainnya. Lihat Bagian 19.3.1 untuk detailnya.

menolak

Tolak koneksi tanpa syarat. Ini berguna untuk "memfilter" host tertentu dari grup, misalnya garis tolak dapat memblokir host tertentu agar tidak terhubung, sedangkan baris selanjutnya memungkinkan host yang tersisa di jaringan tertentu untuk terhubung.

md5

Memerlukan klien untuk menyediakan kata sandi hash MD5 ganda untuk otentikasi. Lihat Bagian 19.3.2 untuk detailnya.

kata sandi

Memerlukan klien untuk menyediakan kata sandi yang tidak terenkripsi untuk otentikasi. Karena kata sandi dikirim dalam bentuk teks yang jelas melalui jaringan, ini tidak boleh digunakan pada jaringan yang tidak terpercaya. Lihat Bagian 19.3.2 untuk detailnya.

gss

Gunakan GSSAPI untuk mengautentikasi pengguna. Ini hanya tersedia untuk koneksi TCP / IP. Lihat Bagian 19.3.3 untuk detailnya.

sspi

Gunakan SSPI untuk mengotentikasi pengguna. Ini hanya tersedia di Windows. Lihat Bagian 19.3.4 untuk detailnya.

ident

Dapatkan nama pengguna sistem operasi klien dengan menghubungi server ident pada klien dan periksa apakah cocok dengan nama pengguna database yang diminta. Otentikasi identitas hanya dapat digunakan pada koneksi TCP / IP. Ketika ditentukan untuk koneksi lokal, otentikasi rekan akan digunakan sebagai gantinya. Lihat Bagian 19.3.5 untuk detailnya.

teman sebaya

Dapatkan nama pengguna sistem operasi klien dari sistem operasi dan periksa apakah cocok dengan nama pengguna basis data yang diminta. Ini hanya tersedia untuk koneksi lokal. Lihat Bagian 19.3.6 untuk detailnya.

lap

Otentikasi menggunakan server LDAP. Lihat Bagian 19.3.7 untuk detailnya.

radius

Otentikasi menggunakan server RADIUS. Lihat Bagian 19.3.8 untuk detailnya.

cert

Otentikasi menggunakan sertifikat klien SSL. Lihat Bagian 19.3.9 untuk detailnya.

pam

Otentikasi menggunakan layanan Pluggable Authentication Modules (PAM) yang disediakan oleh sistem operasi. Lihat Bagian 19.3.10 untuk perincian.

Jadi ... untuk menyelesaikan masalah yang Anda alami, Anda dapat melakukan salah satu dari yang berikut:

  1. Ubah metode otentikasi yang didefinisikan dalam pg_hba.conf file Anda menjadi trust,, md5atau password(tergantung pada kebutuhan keamanan dan kesederhanaan Anda) untuk catatan koneksi lokal yang telah Anda tetapkan di sana.

  2. Perbarui pg_ident.confuntuk memetakan pengguna sistem operasi Anda ke pengguna PostgreSQL dan memberikan mereka hak akses yang sesuai, tergantung pada kebutuhan Anda.

  3. Biarkan pengaturan IDENT sendiri dan buat pengguna di basis data Anda untuk setiap pengguna sistem operasi yang ingin Anda beri akses. Jika pengguna sudah diautentikasi oleh OS dan login, PostgreSQL tidak akan memerlukan otentikasi lebih lanjut dan akan memberikan akses ke pengguna tersebut berdasarkan hak istimewa (peran) apa pun yang diberikan kepadanya dalam database. Ini adalah konfigurasi default.

Catatan: Lokasi pg_hba.confdan pg_ident.conftergantung pada OS.

Leo Bedrosian
sumber
4
Bagi saya, ini adalah jawaban terbaik. Ketika Anda mengetahui semua opsi ini, Anda dapat dengan mudah mengubah konfigurasi. Dan terutama ketika Anda berada di mesin Dev Anda dapat dengan mudah mengatur 'ident' untuk semua entri untuk menghindari membuang waktu Anda. Terima kasih
venkatareddy
1
Ini juga membantu saya. Dalam kasus saya file pg_hba.conf diatur ke peer, saya mengubahnya menjadi kata sandi. Perhatikan bahwa dari instalasi vanilla saya juga harus menetapkan kata sandi untuk pengguna postgres, sudo su - postgres psql, \ kata sandi mengatur kata sandi. Kemudian luncurkan koneksi default dari pdgadmin3 dengan nama pengguna postgres dan kata sandi yang Anda atur.
edencorbin
1
Dan di mana file itu ditemukan? Memang, Anda mungkin perlu membuat daftar, karena tampaknya tidak ada konsistensi antara versi. Saya kira saya akan menjalankan pencarian di '/'.
JosephK
1
Di Ubuntu-16,04 itu /etc/postgresql/9.6/main/pg_hba.conf.
Mike O'Connor
1
Sebagai seseorang yang baru mengenal psql, ini sangat membantu dan harus menjadi jawaban yang diterima karena melayani berbagai metode otentikasi
Vyrnach
45

Cukup menambahkan -h localhostbit itu semua milikku diperlukan untuk bekerja

boulder_ruby
sumber
Apakah kita tahu mengapa ini memperbaikinya?
Michael Pell
Default postgresql tidak diatur secara wajar. Mereka mungkin sudah memperbaikinya sekarang, saya tidak tahu. Jelas url defaultnya adalahthis_computer = 'http://localhost'
boulder_ruby
15

Anda dapat mengatur variabel lingkungan PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:
Ivan Trechyokas
sumber
15

Seandainya tidak ada yang di atas bekerja untuk Anda:

Saya sudah melakukan beberapa instalasi Postgres, tetapi hari ini bingung dengan sistem RedHat 6.5 (menginstal Postgres 9.3). Konfigurasi hba.conf tipikal saya yang ditampilkan Aron di atas tidak berfungsi. Ternyata sistem saya menggunakan IPV6, dan mengabaikan konfigurasi IPV4. Menambahkan baris:

host    all             all             ::1/128                 password

memungkinkan saya untuk masuk dengan sukses.

Ethan Brown
sumber
Terima kasih Ethan. Saya menjalankan Fedora 20 dan saya menghadapi masalah yang sama dengan OP. Setelah mengubah IPV4 dan IPV6 menjadi kata sandi. Koneksi berhasil.
Ibn Saeed
1
Sama-sama. Sering kali saya mendapat manfaat dari posting orang lain ketika menghadapi masalah pemrograman atau sistem. Senang saya bisa mengembalikan sedikit.
Ethan Brown
1
Ini menyelamatkan hidup saya di Fedora 32!
Rami
12

Dari semua jawaban di atas tidak ada yang berhasil untuk saya. Saya harus secara manual mengubah kata sandi pengguna dalam database dan tiba-tiba berhasil.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Saya menggunakan pengaturan berikut:

pg_hba.conf

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

Koneksi berhasil akhirnya untuk perintah berikut:

psql -U produser -d dbname -h localhost -W 
Joseph Persie
sumber
Mengikuti ini membantu saya di sini, Joseph. Terutama, perintah koneksi di akhir untuk membantu saya mengujinya. Juga, saya akan menambahkan restart layanan Postgresql kalau-kalau ada yang bertanya-tanya (tapi saya mengerti itu tersirat). Sangat menghargainya!
Harlin
10

Saya menemukan bahwa saya harus menginstal server identitas, yang mendengarkan pada port 113.

sudo apt-get install pidentd
sudo service postgresql restart

Dan kemudian ident bekerja.

Dustin Kirkland
sumber
10

Hmmm ...

Jika Anda dapat terhubung dengan nama pengguna dan kata sandi di pgAdminIII tetapi Anda tidak dapat terhubung dengan psqlkedua program tersebut mungkin terhubung ke database secara berbeda.

[Jika Anda terhubung ke database yang berbeda, pertama-tama cobalah menghubungkan ke database yang sama. Lihat di bawah.]

Dari PostgreSQL: Dokumentasi: 9.3: psql :

Jika Anda menghilangkan nama host, psql akan terhubung melalui soket domain Unix ke server di host lokal, atau melalui TCP / IP ke host lokal di mesin yang tidak memiliki soket domain Unix.

Jika Anda tidak menjalankan sesuatu seperti psql ... -h host_name ..., dan Anda menjalankan Ubuntu, psqlharus terhubung melalui soket Unix-domain, jadi PostgreSQL mungkin tidak dikonfigurasikan untuk memungkinkan salah satu metode otentikasi kata sandi untuk pengguna postgres .

Anda dapat menguji ini dengan menjalankan:

sudo -u postgres psql

Jika cara di atas berfungsi, server Anda mungkin dikonfigurasikan untuk menggunakan otentikasi rekan untuk koneksi lokal oleh pengguna postgres , yaitu meminta OS untuk nama pengguna Anda untuk mengonfirmasi bahwa Anda postgres .

Jadi Ini Mungkin File pg_hba.conf Anda

Path lengkap file tersebut adalah sesuatu seperti /etc/postgresql/9.3/main/pg_hba.conf . Anda dapat melihatnya dengan, mis sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Jika Anda menghilangkan nama host dalam psqlperintah Anda, Anda harus dapat terhubung jika Anda menambahkan entri berikut ke file pg_hba.conf Anda :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[Baris komentar dalam file pg_hba.conf dimulai dengan #.]

Jika Anda sedang termasuk nama host di Anda psqlperintah, tambahkan entri ini sebagai gantinya:

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

Anda harus meletakkan entri sebelum entri lain cocok dengan koneksi Anda via psql. Jika ragu tentang di mana harus meletakkannya, taruh saja sebelum baris pertama yang tidak dikomentari.

Lebih lanjut tentang pg_hba.conf

Dari PostgreSQL: Dokumentasi: 9.3: File pg_hba.conf [tambang tebal]:

Catatan pertama dengan jenis koneksi yang cocok , alamat klien , database yang diminta , dan nama pengguna digunakan untuk melakukan otentikasi. Tidak ada "cadangan" atau "cadangan": jika satu catatan dipilih dan otentikasi gagal, catatan selanjutnya tidak dipertimbangkan. Jika tidak ada catatan yang cocok, akses ditolak.

Perhatikan bahwa catatan tidak cocok dengan metode otentikasi. Jadi, jika file pg_hba.conf Anda berisi entri berikut:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Maka Anda tidak akan dapat terhubung melalui:

psql -u postgres

Kecuali salah satu dari entri ini ada di file pg_hba.conf Anda di atas entri sebelumnya:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!
Kenny Evitt
sumber
2
terlambat ke permainan, tetapi, serius, terima kasih telah berupaya menjelaskan hal-hal dengan benar sehingga saya mengerti!
Jeffrey 'jf' Lim
10

Dalam kasus saya, solusinya di sini: (untuk orang yang berkepentingan) login ke postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

salam

VanThaoNguyen
sumber
7

Masalahnya masih file pg_hba.conf Anda. Baris ini: Anda dapat menemukan file ini di / etc / postgres / varion / main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Ini adalah deskripsi singkat dari kedua opsi menurut dokumen resmi PostgreSQL tentang metode otentikasi.

Otentikasi rekan

Metode otentikasi rekan bekerja dengan memperoleh nama pengguna sistem operasi klien dari kernel dan menggunakannya sebagai nama pengguna basis data yang diizinkan (dengan pemetaan nama pengguna opsional). Metode ini hanya didukung pada koneksi lokal.

Otentikasi kata sandi

Metode otentikasi berbasis kata sandi adalah md5 dan kata sandi. Metode ini beroperasi dengan cara yang sama kecuali untuk cara kata sandi dikirim melalui koneksi, yaitu MD5-hashed dan clear-text.

Jika Anda sama sekali khawatir tentang serangan "sniffing" kata sandi maka md5 lebih disukai. Kata sandi polos harus selalu dihindari jika memungkinkan. Namun, md5 tidak dapat digunakan dengan fitur db_user_namespace. Jika koneksi dilindungi oleh enkripsi SSL maka kata sandi dapat digunakan dengan aman (meskipun otentikasi sertifikat SSL mungkin merupakan pilihan yang lebih baik jika tergantung pada penggunaan SSL).

Setelah mengubah file ini, jangan lupa untuk me-restart server PostgreSQL Anda. Jika Anda menggunakan Linux, itu mungkinsudo service postgresql restart.

Suneel Kumar
sumber
7

Untuk fedora26 dan postgres9.6

Pertama, login sebagai root pengguna lalu masuk ke psql dengan perintah berikut

$ su postgres  

kemudian

$ psql

di psqlcari lokasi hba_file ==> berartipg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

dalam file pg_hba.confubah akses pengguna ke ini

host all all 127.0.0.1/32 md5
mohsen
sumber
6

solusi saya pada PostgreSQL 9.3 di Mac OSX di bash shell adalah menggunakan sudountuk masuk ke folder data, dan kemudian menambahkan baris yang diperlukan ke pg_hba.conffile untuk memungkinkan semua pengguna dapat dipercaya dan dapat login. Inilah yang saya lakukan :

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W
Aaron Lelevier
sumber
1
Ini bagus untuk server pengembangan, tetapi saya tidak akan merekomendasikan ini untuk lingkungan produksi karena Anda tidak lagi memerlukan kata sandi untuk terhubung ke database dengan pengaturan ini.
Michael
4

Saya telah menghabiskan lebih banyak waktu untuk menyelesaikan kesalahan ini yang ingin saya akui.

Urutan konfigurasi otentikasi dalam pg_hba.conf relevan untuk kasus Anda, saya pikir. File konfigurasi default mencakup beberapa baris dalam pemasangan vanilla. Default ini dapat cocok dengan kondisi upaya otentikasi Anda yang mengakibatkan kegagalan untuk mengotentikasi. Gagal terlepas dari konfigurasi tambahan yang ditambahkan di akhir file .conf.

Untuk memeriksa baris konfigurasi mana yang digunakan, pastikan untuk melihat file log default untuk pesan. Anda mungkin melihat sesuatu seperti ini

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

Ternyata garis default ini menyebabkan penolakan.

host    all             all             127.0.0.1/32            ident

coba komentari.

Jeremy Whiting
sumber
3

Satu retas di sekitar ini adalah untuk mengedit pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

Untuk sementara

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

Pada titik ini Anda selesai. Untuk keamanan, lalu pergi dan

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

lalu kembali dan atur pg_hba.conf kembali ke

# Database administrative login by Unix domain socket
local   all             postgres                                   md5
ntg
sumber
1

Saya memiliki masalah yang sama dan saya memperbaikinya di pg_hba.conf ketika menghapus semua metode ident bahkan untuk alamat IP6 (meskipun saya hanya memiliki IP4 pada mesin).

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5
TMa
sumber
0

Saya memiliki masalah yang sama setelah mengikuti ini: Pengaturan PostgreSQL untuk pengembangan Rails di Ubuntu 12.04

Saya mencoba jawaban lain tetapi yang harus saya lakukan adalah di: "config / database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:
Daniel
sumber
0

Jika Anda menggunakannya pada CentOS, Anda mungkin perlu memuat ulang postgres setelah membuat solusi di atas:

systemctl restart postgresql-9.3.service
Jaswinder
sumber
Sekarang baru sajapostgresql
Neil Chowdhury
@NeilChowdhury layanan postgresql masih memiliki versi nama layanan setidaknya di sistem linux. Jalankan perintah ini untuk melihatsystemctl status | grep postgres
Ikrom
0

Saya harus menginstal ulang pdAdmin untuk menyelesaikan masalah ini

brew cask reinstall pgadmin4
Sofia Khwaja
sumber
0

Untuk Windows jika Anda tidak ingin mengedit pb_gba.conf yaitu meninggalkan metode ke MD5 (default), buat pengguna baru, dengan menjalankan kueri ini di alat Kueri di PGadmin PGadmin

CREATE USER admin WITH PASSWORD 'secret'

lalu dalam cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

di mana dbname adalah db Anda di postgresql

masukkan deskripsi gambar di sini

Ajay Tom George
sumber
-3

Ini bekerja untuk saya: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
Ing. M.D'Ambrosio
sumber
1
Ini memungkinkan siapa saja dari localhost untuk masuk sebagai pengguna apa pun. Perilaku ini tidak disebutkan di mana pun di tautan. Dan ya, halaman info debian berisi hal yang sama.
rkapl