Continua a leggere, le le migliori opzioni vengono per ultime . Ma prima chiariamo un paio di cose.
Silenzia solo la richiesta della password
Se il tuo problema è solo la richiesta della password, puoi silenziarlo. Cito il manuale qui:
-w
--no-password
Non emettere mai una richiesta di password. Se il server richiede l'autenticazione della password e una password non è disponibile con altri mezzi come .pgpass
file, il tentativo di connessione avrà esito negativo. Questa opzione può essere utile nei processi batch e negli script in cui non è presente alcun utente per immettere una password. (...)
Probabilmente non hai bisogno di una password
Normalmente questo non è necessario. Il superutente predefinito del database postgres
di solito corrisponde all'utente di sistema con lo stesso nome. Esecuzione di psql
da questo account non richiede una password se il metodo di autenticazione peer
o ident
sono impostati nel tuo pg_hba.conf
file. Probabilmente hai una linea come questa:
local all postgres peer
E di solito anche:
local all all peer
Ciò significa che ogni locale l'utente può accedere a un tutti database come utente del database con lo stesso nome senza password.
Comunque , c'è un malinteso comune qui. Citando ancora:
Questo metodo è supportato solo su connessioni locali .
Enfasi in grassetto la mia.
Ti stai connettendo a localhost
, che non è una "connessione locale" , anche se contiene la parola "locale". È una connessione TCP/IP a 127.0.0.1. Wikipedia su localhost:
Sui moderni sistemi informatici, localhost
come nome host si traduce in un indirizzo IPv4 nel 127.0.0.0/8
(loopback) net block, solitamente 127.0.0.1
o ::1
in IPv6.
Soluzione semplice per le connessioni locali
Ometti il parametro -h
dal psql
invocazione. Citando il manuale su psql
ancora una volta:
Se ometti il nome host, psql si connetterà tramite un socket di dominio Unix a un server sull'host locale o tramite TCP/IP a localhost
su macchine che non hanno socket di dominio Unix.
Finestre
... non ha socket di dominio Unix, pg_hba.conf
righe che iniziano con local
non sono applicabili su Windows. Su Windows ti connetti tramite localhost
di default, il che ci riporta all'inizio.
Se i tuoi requisiti di sicurezza sono permissivi, puoi semplicemente fidarti di tutte le connessioni tramite localhost
:
host all all 127.0.0.1/32 trust
Lo farei solo per il debug con le connessioni remote disattivate. Per un po' di sicurezza in più puoi usare l'autenticazione SSPI su Windows. Aggiungi questa riga a pg_hba.conf
per connessioni "locali":
host all all 127.0.0.1/32 sspi
Se hai effettivamente bisogno di una password
Potresti imposta una variabile d'ambiente , ma questo è scoraggiato , soprattutto per Windows. Il manuale:
PGPASSWORD
si comporta come il parametro di connessione della password. L'uso di questa variabile d'ambiente non è raccomandato per motivi di sicurezza, poiché alcuni sistemi operativi consentono agli utenti non root di vedere le variabili d'ambiente di processo tramite ps; considera invece l'utilizzo di ~/.pgpass
file (vedi Sezione 32.15).
Il manuale su psql
:
Un conninfo
string è un'alternativa per specificare i parametri di connessione:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
O un URI , che viene utilizzato al posto del nome di un database:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
File password
Ma di solito è preferibile impostare un .pgpass
file piuttosto che inserire le password nei file di script.
Leggere attentamente il breve capitolo del manuale. In particolare, si noti che qui ...
Un nome host di localhost
corrisponde a entrambi TCP (nome host localhost
) e socket di dominio Unix (pghost
vuota o la directory socket predefinita) connessioni provenienti dalla macchina locale.
Il percorso esatto dipende dal sistema. Questo file può memorizzare le password per più combinazioni di ruolo e porta (cluster di database):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
Su Windows le macchine cercano il file in:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
in genere si risolve in:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.