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-password
Jangan pernah mengeluarkan prompt kata sandi. Jika server memerlukan otentikasi kata sandi dan kata sandi tidak tersedia dengan cara lain seperti
.pgpass
file, 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,
localhost
sebagai nama host diterjemahkan ke alamat IPv4 di127.0.0.0/8
(loopback) blok bersih, biasanya127.0.0.1
, atau::1
di 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
localhost
pada 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:
PGPASSWORD
berperilaku 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~/.pgpass
file (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:[email protected]: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
localhost
cocok dengan kedua TCP (nama hostlocalhost
) dan soket domain Unix (pghost
kosong 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\
.