Masalahnya
Postgres berpotensi menggunakan IPv6 saat menentukan -h localhost
yang diberikan pg_hba.conf
di atas menentukan ident
, permintaan kata sandi akan dikembalikan.
Namun saat -h 127.0.0.1
ditentukan, ini memaksa Postgres untuk menggunakan IPv4 , yang disetel ke trust
di konfigurasi di atas dan mengizinkan akses tanpa kata sandi.
Jawabannya
Jadi jawabannya adalah memodifikasi baris host IPv6 di pg_hba.conf
untuk menggunakan trust
:
# IPv6 local connections:
host all all ::1/128 trust
Mengingat untuk memulai kembali layanan Postgres setelah melakukan perubahan konfigurasi.
Di pg_hba.conf, pertandingan pertama penting. Panduan:
Catatan pertama dengan tipe koneksi yang cocok, alamat klien, basis data yang diminta, dan nama pengguna digunakan untuk melakukan autentikasi. Tidak ada "fall-through" atau "backup":jika satu catatan dipilih dan autentikasi gagal, catatan berikutnya tidak dipertimbangkan. Jika tidak ada catatan yang cocok, akses ditolak.
Perhatikan urutan terbalik :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
Tapi:
host all all localhost ident
host all all localhost trust
Ingatlah untuk memuat ulang setelah menyimpan perubahan ke pg_hba.conf
. (Mulai ulang tidak diperlukan.) Manual:
pg_hba.conf
file dibaca saat start-up dan ketika proses server utama menerimaSIGHUP
sinyal. Jika Anda mengedit file pada sistem yang aktif, Anda perlu memberi sinyal kepada postmaster (menggunakanpg_ctl reload
, memanggil fungsi SQLpg_reload_conf()
, atau menggunakankill -HUP
) untuk membuatnya membaca ulang file.
Jika Anda benar-benar "menambahkan" baris seperti yang Anda tulis, seharusnya tidak ada efek sama sekali. Namun jika Anda mengganti garis, ada.
Dalam kasus pertama, Anda mendapatkan trust
metode otentikasi, yang merupakan kebijakan pintu terbuka. Panduan:
PostgreSQL mengasumsikan bahwa siapa pun yang dapat terhubung ke server berwenang untuk mengakses database dengan nama pengguna database apa pun yang mereka tentukan (bahkan nama pengguna super)
Namun dalam kasus kedua Anda mendapatkan ident
metode autentikasi, yang harus disiapkan dengan benar agar berfungsi.
Plus, seperti yang ditunjukkan Cas nanti, localhost
mencakup IPv4 dan IPv6, sedangkan 127.0.0.1/32
hanya berlaku untuk IPv4.
Jika Anda benar-benar menggunakan versi lama 8.4, buka manual lama untuk 8.4. Anda tahu bahwa 8.4 telah mencapai EOL pada tahun 2014 dan tidak didukung lagi? Pertimbangkan untuk mengupgrade ke versi saat ini.
Di Postgres 9.1 atau lebih baru Anda lebih suka menggunakan peer
dari ident
.
Selengkapnya:
- Jalankan file batch dengan perintah psql tanpa kata sandi