Teruslah membaca, opsi terbaik datang terakhir . Tapi mari kita perjelas beberapa hal terlebih dahulu.
Hanya diamkan permintaan sandi
Jika masalah Anda hanya permintaan kata sandi, Anda dapat membungkamnya. Saya mengutip manualnya di sini:
-w--no-passwordJangan pernah mengeluarkan prompt kata sandi. Jika server memerlukan otentikasi kata sandi dan kata sandi tidak tersedia dengan cara lain seperti
.pgpassfile, upaya koneksi akan gagal. Opsi ini dapat berguna dalam pekerjaan batch dan skrip di mana tidak ada pengguna yang memasukkan kata sandi. (...)
Anda mungkin tidak memerlukan sandi
Biasanya ini tidak perlu. Pengguna super basis data default postgres biasanya sesuai dengan pengguna sistem dengan nama yang sama. Menjalankan psql dari akun ini tidak memerlukan kata sandi jika metode otentikasi peer atau ident diatur di pg_hba.conf . Anda mengajukan. Anda mungkin memiliki baris seperti ini:
local all postgres peer
Dan biasanya juga:
local all all peer
Artinya, setiap lokal pengguna dapat masuk ke semua database sebagai pengguna database dengan nama yang sama tanpa password.
Namun , ada kesalahpahaman umum di sini. Mengutip lagi:
Metode ini hanya didukung pada koneksi lokal .
Penekanan saya yang berani.
Anda terhubung ke localhost , yang bukan "koneksi lokal" , meskipun memiliki kata "lokal" di dalamnya. Ini adalah koneksi TCP/IP ke 127.0.0.1. Wikipedia di localhost:
Pada sistem komputer modern,
localhostsebagai nama host diterjemahkan ke alamat IPv4 di127.0.0.0/8(loopback) blok bersih, biasanya127.0.0.1, atau::1di IPv6.
Solusi sederhana untuk koneksi lokal
Hilangkan parameter -h dari psql doa. Mengutip manual di psql sekali lagi:
Jika Anda menghilangkan nama host, psql akan terhubung melalui soket domain Unix ke server di host lokal, atau melalui TCP/IP ke
localhostpada mesin yang tidak memiliki soket domain Unix.
Windows
... tidak memiliki soket domain Unix, pg_hba.conf baris dimulai dengan local tidak berlaku di Windows. Di Windows Anda terhubung melalui localhost secara default, yang membawa kita kembali ke awal.
Jika persyaratan keamanan Anda lemah, Anda bisa mempercayai semua koneksi melalui localhost :
host all all 127.0.0.1/32 trust
Saya hanya akan melakukan itu untuk debugging dengan koneksi jarak jauh mati. Untuk keamanan lebih, Anda dapat menggunakan otentikasi SSPI di Windows. Tambahkan baris ini ke pg_hba.conf untuk koneksi "lokal":
host all all 127.0.0.1/32 sspi
Jika Anda benar-benar membutuhkan kata sandi
Anda bisa setel variabel lingkungan , tapi ini tidak disarankan , terutama untuk Windows. Panduan:
PGPASSWORDberperilaku sama dengan parameter koneksi kata sandi. Penggunaan variabel lingkungan ini tidak disarankan untuk alasan keamanan, karena beberapa sistem operasi mengizinkan pengguna non-root untuk melihat variabel lingkungan proses melalui ps; sebagai gantinya pertimbangkan untuk menggunakan~/.pgpassfile (lihat Bagian 32.15).
Panduan tentang psql :
Sebuah conninfo string adalah alternatif untuk menentukan parameter koneksi:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Atau URI , yang digunakan sebagai pengganti nama database:
$ psql postgresql://myuser:example@sqldat.com:5432/mydb?sslmode=require
File Kata Sandi
Tetapi biasanya lebih baik menyiapkan .pgpass berkas daripada memasukkan kata sandi ke dalam file skrip.
Baca bab singkat dalam manual dengan cermat. Secara khusus, perhatikan bahwa di sini ...
Nama host
localhostcocok dengan kedua TCP (nama hostlocalhost) dan soket domain Unix (pghostkosong atau direktori soket default) yang berasal dari mesin lokal.
Jalur yang tepat tergantung pada sistem. File ini dapat menyimpan kata sandi untuk beberapa kombinasi peran dan port (klaster DB):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
Di Windows mesin mencari file di:
%APPDATA%\postgresql\pgpass.conf
%APPDATA% biasanya diselesaikan menjadi:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .