Bagaimana saya bisa mendapatkan pg_dump untuk mengotentikasi dengan benar

98

Saya telah mencoba menggunakan variable host PGPASSWORDdan .pgpassdan tak satu pun dari kedua akan memungkinkan saya untuk otentikasi ke database. Saya harus chmod'd .pgpassuntuk izin yang sesuai dan juga mencoba:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Kata sandi TIDAK mengandung \namun saya membungkusnya dalam tanda kutip tunggal PGPASS='mypass\'dan masih tidak akan mengotentikasi.

Saya sedang berlari:

pg_dump dbname -U username -Fc

dan saya masih menerima

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
Kosmonaut
sumber
1
Bagian "... Otentikasi rekan ..." dari pesan kesalahan berarti bahwa ia tidak menggunakan otentikasi kata sandi sama sekali.
Milen A. Radev

Jawaban:

197

Solusi Cepat

Masalahnya adalah ia mencoba melakukan peerotentikasi lokal berdasarkan nama pengguna Anda saat ini. Jika Anda ingin menggunakan kata sandi, Anda harus menentukan nama host dengan -h.

pg_dump dbname -U username -h localhost -F c

Penjelasan

Ini karena hal berikut di pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Ini memberitahu Postgres untuk menggunakan peerotentikasi untuk pengguna lokal yang membutuhkan nama pengguna postgres agar sesuai dengan nama pengguna sistem Anda saat ini. Baris kedua mengacu pada koneksi yang menggunakan nama host dan akan memungkinkan Anda untuk mengotentikasi dengan kata sandi melalui md5metode ini.

Konfigurasi Pengembangan Pilihan Saya

CATATAN : Ini seharusnya hanya digunakan pada workstation pengguna tunggal. Hal ini dapat menyebabkan kerentanan keamanan utama pada mesin produksi atau multi-pengguna.

Saat mengembangkan terhadap contoh postgres lokal, saya ingin mengubah metode otentikasi lokal saya menjadi trust. Ini akan memungkinkan koneksi ke postgres melalui soket unix lokal sebagai pengguna mana pun tanpa kata sandi. Ini dapat dilakukan hanya dengan mengubah di peeratas trustdan memuat ulang postgres.

# Don't require a password for local connections
local   all             all                                     trust
Jim Mitchener
sumber
6
Bagi siapa pun yang tidak yakin di mana file conf Anda: gunakan sudo locate pg_hba.conf- itu harus sudo karena pengguna postgres akan menjadi satu-satunya yang memiliki akses ke direktori (menurut saya).
jcollum
perintah Anda berfungsi untuk saya tetapi saya tidak dapat menemukan di mana itu, atau apa nama file, bagaimana saya bisa menemukan file itu?
Sobhan
-1

Terkadang Anda bisa menggunakan

sudo -u postgres pg_dump ...
Roland Pihlakas
sumber