Blijf lezen, de beste opties komen als laatste . Maar laten we eerst een paar dingen verduidelijken.
Alleen het wachtwoordverzoek dempen
Als uw probleem alleen de wachtwoordprompt is, kunt u dit dempen. Ik citeer hier de handleiding:
-w
--no-password
Geef nooit een wachtwoordprompt uit. Als de server wachtwoordverificatie vereist en een wachtwoord niet beschikbaar is op een andere manier, zoals een
.pgpass
bestand, zal de verbindingspoging mislukken. Deze optie kan handig zijn in batchtaken en scripts waar geen gebruiker aanwezig is om een wachtwoord in te voeren. (...)
U heeft waarschijnlijk geen wachtwoord nodig
Normaal gesproken is dit niet nodig. De standaard database-supergebruiker postgres
komt meestal overeen met de systeemgebruiker met dezelfde naam. psql
uitvoeren van dit account vereist geen wachtwoord als de authenticatiemethode peer
of ident
zijn ingesteld in uw pg_hba.conf
het dossier. Je hebt waarschijnlijk een regel als deze:
local all postgres peer
En meestal ook:
local all all peer
Dit betekent dat elke lokale gebruiker kan inloggen op een alles database als databasegebruiker met dezelfde naam zonder wachtwoord.
Echter , is hier een veel voorkomende misvatting. Nogmaals citeren:
Deze methode wordt alleen ondersteund op lokale verbindingen .
Vetgedrukte nadruk van mij.
U maakt verbinding met localhost
, wat geen "lokale verbinding" is , ook al heeft het het woord "lokaal" erin. Het is een TCP/IP-verbinding met 127.0.0.1. Wikipedia op localhost:
Op moderne computersystemen,
localhost
zoals een hostnaam zich vertaalt naar een IPv4-adres in de127.0.0.0/8
(loopback) netblok, meestal127.0.0.1
, of::1
in IPv6.
Eenvoudige oplossing voor lokale verbindingen
Laat de parameter -h
weg van de psql
aanroeping. De handleiding citeren op psql
nog een keer:
Als je de hostnaam weglaat, zal psql verbinding maken via een Unix-domein socket naar een server op de lokale host, of via TCP/IP naar
localhost
op machines die geen Unix-domein sockets hebben.
Vensters
... heeft geen Unix-domein sockets, pg_hba.conf
regels die beginnen met local
zijn niet van toepassing op Windows. Op Windows maak je verbinding via localhost
standaard, wat ons terugbrengt naar het begin.
Als uw beveiligingsvereisten laks zijn, kunt u alle verbindingen via localhost
vertrouwen :
host all all 127.0.0.1/32 trust
Ik zou dat alleen doen voor het debuggen met externe verbindingen uit. Voor wat meer veiligheid kunt u SSPI-authenticatie op Windows gebruiken. Voeg deze regel toe aan pg_hba.conf
voor "lokale" verbindingen:
host all all 127.0.0.1/32 sspi
Als je echt een wachtwoord nodig hebt
Je zou stel een omgevingsvariabele in , maar dit wordt afgeraden , speciaal voor Windows. De handleiding:
PGPASSWORD
gedraagt zich hetzelfde als de wachtwoordverbindingsparameter. Het gebruik van deze omgevingsvariabele wordt om veiligheidsredenen niet aanbevolen, aangezien sommige besturingssystemen niet-rootgebruikers toestaan om procesomgevingsvariabelen via ps te zien; overweeg in plaats daarvan de~/.pgpass
. te gebruiken bestand (zie Sectie 32.15).
De handleiding op psql
:
Een conninfo
string is een alternatief om verbindingsparameters op te geven:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Of een URI , die wordt gebruikt in plaats van een databasenaam:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Wachtwoordbestand
Maar het heeft meestal de voorkeur om een .pgpass
. in te stellen bestand in plaats van wachtwoorden in scriptbestanden te plaatsen.
Lees het korte hoofdstuk in de handleiding aandachtig door. Merk in het bijzonder op dat hier ...
Een hostnaam van
localhost
komt overeen met beide TCP (hostnaamlocalhost
) en Unix domein socket (pghost
lege of de standaard socket-directory) verbindingen afkomstig van de lokale machine.
Het exacte pad is afhankelijk van het systeem. Dit bestand kan wachtwoorden opslaan voor meerdere combinaties van rol en poort (DB-cluster):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
Op Windows machines zoeken het bestand in:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
wordt meestal opgelost in:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.