Bisakah saya mengaktifkan otentikasi peer dan md5 untuk pengguna lokal PostgreSQL yang sama di pg_hba.conf?

14

Saya ingin membiarkan pengguna PostgreSQL (super) diautentikasi dengan metode otentikasi "peer" atau "md5", lebih disukai menggunakan soket domain Unix lokal dalam kedua kasus. Masalahnya adalah urutan entri dalam pg_hba.conf penting, dan kecocokan pertama akan diterapkan.

Apa yang saya punya:

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer
  local   all        all                 md5

Apa yang saya inginkan (sintaks tidak valid):

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer-or-md5
  local   all        all                 md5

Berikut ini beberapa detail lebih lanjut tentang lingkungan yang ingin kami gunakan di:

Pada server khusus ini, semua database relatif kecil (masing-masing <10MB data) dan hanya baca-saja. Mereka dijatuhkan dan diciptakan kembali setiap malam oleh superuser harold. harold juga merupakan akun sistem, jadi "rekan" berfungsi dengan baik untuk cronjobs tanpa kata sandi, dll. Lalu ada antarmuka web yang mengakses basis data: ini menggunakan otentikasi md5 (pengguna sistem adalah server web, nama pengguna pg, kata sandi, dan nama db disediakan oleh pengunjung). Sekarang saya ingin membiarkan pengguna harold masuk melalui antarmuka web juga. Ini gagal karena pengaturan "rekan" untuk harold.

Solusi saat ini adalah membiarkan antarmuka web terhubung melalui TCP, menggunakan

# TYPE    DATABASE   USER      ADDRESS        METHOD
  host    all        all       127.0.0.1/32   md5
  host    all        all       ::1/128        md5

selain entri lokal pada contoh pertama. Ini berfungsi, tetapi saya lebih suka menggunakan soket lokal di sini juga - untuk kinerja dan karena firasat bahwa itu sepertinya hal yang tepat untuk dilakukan.

Apakah ini mungkin? Apakah ada solusi yang lebih baik untuk kita?

Zilk
sumber

Jawaban:

10

Menurut pertanyaan StackOverflow yang serupa , jawabannya tidak, Anda tidak dapat mengaktifkan dua jenis otentikasi untuk jenis, database, pengguna, dan alamat yang sama.

Pertanyaan StackOverflow merekomendasikan menggunakan .pgpassfile di direktori home pengguna dan menggunakan otentikasi md5, tapi saya tidak yakin itu akan berhasil untuk pekerjaan cron.

Nathan
sumber
Ini akan berfungsi jika cronjob berasal dari pengguna yang sama yang memiliki .pgpass di direktori rumahnya.
Andrei Mikhaltsov