GNU/Linux >> Belajar Linux >  >> Linux

Postgres tidak mengizinkan localhost tetapi berfungsi dengan 127.0.0.1

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 menerima SIGHUP sinyal. Jika Anda mengedit file pada sistem yang aktif, Anda perlu memberi sinyal kepada postmaster (menggunakan pg_ctl reload , memanggil fungsi SQL pg_reload_conf() , atau menggunakan kill -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

Linux
  1. Bisakah Skrip Dapat Dieksekusi Tetapi Tidak Dapat Dibaca?

  2. Bashscript Bekerja Dari Terminal Tetapi Tidak Dari Crontab?

  3. Operasi Tidak Didukung Dengan Setfacl?

  1. Unduh Gambar Berfungsi di FireFox tetapi tidak di Internet Explorer

  2. Perintah "ntpq -pn" kembali dengan kesalahan "Nama atau layanan tidak dikenal"

  3. Jalankan skrip dengan rc.local:skrip berfungsi, tetapi tidak saat boot

  1. Bagaimana cara meminta file tetapi tidak menyimpannya dengan Wget?

  2. Mengapa Tomcat bekerja dengan port 8080 tetapi tidak dengan 80?

  3. Pycharm tensorflow ImportError tetapi berfungsi baik dengan Terminal