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-passwordGeef nooit een wachtwoordprompt uit. Als de server wachtwoordverificatie vereist en een wachtwoord niet beschikbaar is op een andere manier, zoals een
.pgpassbestand, 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,
localhostzoals een hostnaam zich vertaalt naar een IPv4-adres in de127.0.0.0/8(loopback) netblok, meestal127.0.0.1, of::1in 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
localhostop 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:
PGPASSWORDgedraagt 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:example@sqldat.com: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
localhostkomt overeen met beide TCP (hostnaamlocalhost) en Unix domein socket (pghostlege 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\ .