Fortsæt med at læse, de bedste muligheder kommer sidst . Men lad os først afklare et par ting.
Kun lydløs for anmodningen om adgangskode
Hvis dit problem kun er adgangskodeprompten, kan du slå den fra. Jeg citerer manualen her:
-w
--no-password
Udgiv aldrig en adgangskodeprompt. Hvis serveren kræver adgangskodegodkendelse, og en adgangskode ikke er tilgængelig på andre måder, såsom .pgpass
fil, vil forbindelsesforsøget mislykkes. Denne mulighed kan være nyttig i batchjobs og scripts, hvor der ikke er nogen bruger til stede for at indtaste en adgangskode. (...)
Du behøver sandsynligvis ikke en adgangskode
Normalt er dette unødvendigt. Standarddatabasens superbruger postgres
svarer normalt til systembrugeren af samme navn. Kører psql
fra denne konto kræver ikke en adgangskode, hvis godkendelsesmetoden peer
eller ident
er indstillet i din pg_hba.conf
fil. Du har sikkert en linje som denne:
local all postgres peer
Og som regel også:
local all all peer
Det betyder, at alle lokale brugeren kan logge på en alle database som databasebruger af samme navn uden adgangskode.
Men , er der en almindelig misforståelse her. Citerer igen:
Denne metode understøttes kun på lokale forbindelser .
Fed fremhævelse mine.
Du opretter forbindelse til localhost
, som ikke er en "lokal forbindelse" , selvom den har ordet "lokal" i sig. Det er en TCP/IP-forbindelse til 127.0.0.1. Wikipedia på localhost:
På moderne computersystemer, localhost
som et værtsnavn oversættes til en IPv4-adresse i 127.0.0.0/8
(loopback) netblok, normalt 127.0.0.1
eller ::1
i IPv6.
Simpel løsning til lokale forbindelser
Udelad parameteren -h
fra psql
påkaldelse. Citerer manualen på psql
endnu en gang:
Hvis du udelader værtsnavnet, vil psql oprette forbindelse via en Unix-domæne-socket til en server på den lokale vært, eller via TCP/IP til localhost
på maskiner, der ikke har Unix-domæne-sockets.
Windows
... har ikke Unix-domæne-sockets, pg_hba.conf
linjer, der starter med local
er ikke anvendelige på Windows. På Windows forbinder du via localhost
som standard, hvilket bringer os tilbage til starten.
Hvis dine sikkerhedskrav er slappe, kan du bare stole på alle forbindelser via localhost
:
host all all 127.0.0.1/32 trust
Jeg ville kun gøre det til fejlretning med fjernforbindelser slået fra. For mere sikkerhed kan du bruge SSPI-godkendelse på Windows. Tilføj denne linje til pg_hba.conf
for "lokale" forbindelser:
host all all 127.0.0.1/32 sspi
Hvis du rent faktisk har brug for en adgangskode
Du kunne indstille en miljøvariabel , men dette frarådes , især til Windows. Manualen:
PGPASSWORD
opfører sig på samme måde som adgangskodeforbindelsesparameteren. Brug af denne miljøvariabel anbefales ikke af sikkerhedsmæssige årsager, da nogle operativsystemer tillader ikke-rootbrugere at se procesmiljøvariabler via ps; overvej i stedet at bruge ~/.pgpass
fil (se afsnit 32.15).
Manualen om psql
:
En conninfo
streng er et alternativ til at angive forbindelsesparametre:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Eller en URI , som bruges i stedet for et databasenavn:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Adgangskodefil
Men det er normalt at foretrække at konfigurere en .pgpass
fil i stedet for at indsætte adgangskoder i scriptfiler.
Læs det korte kapitel i manualen omhyggeligt. Bemærk især, at her ...
Et værtsnavn for localhost
matcher både TCP (værtsnavn localhost
) og Unix-domæne-socket (pghost
tomme eller standard socket directory) forbindelser, der kommer fra den lokale maskine.
Den nøjagtige vej afhænger af systemet. Denne fil kan gemme adgangskoder til flere kombinationer af rolle og port (DB-klynge):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
På Windows maskiner leder efter filen i:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
løser typisk:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.