Lesen Sie weiter, die besten Optionen kommen zuletzt . Aber lassen Sie uns zuerst ein paar Dinge klarstellen.
Nur die Passwortabfrage stumm schalten
Wenn Ihr Problem nur die Passwortabfrage ist, können Sie sie stumm schalten. Ich zitiere das Handbuch hier:
-w
--no-password
Geben Sie niemals eine Passwortabfrage aus. Wenn der Server eine Kennwortauthentifizierung erfordert und ein Kennwort nicht auf andere Weise verfügbar ist, z. B. als .pgpass
Datei, schlägt der Verbindungsversuch fehl. Diese Option kann bei Batch-Jobs und Skripten nützlich sein, bei denen kein Benutzer anwesend ist, um ein Kennwort einzugeben. (...)
Wahrscheinlich brauchen Sie kein Passwort
Normalerweise ist dies unnötig. Der standardmäßige Datenbank-Superuser postgres
entspricht in der Regel dem gleichnamigen Systembenutzer. Ausführen von psql
von diesem Konto erfordert kein Passwort, wenn die Authentifizierungsmethode peer
ist oder ident
werden in Ihrer pg_hba.conf
gesetzt Datei. Sie haben wahrscheinlich eine Zeile wie diese:
local all postgres peer
Und meistens auch:
local all all peer
Das bedeutet, jeder Einheimische Benutzer können sich bei alle anmelden Datenbank als gleichnamiger Datenbankbenutzer ohne Passwort.
Allerdings , hier liegt ein weit verbreiteter Irrglaube vor. Nochmals zitieren:
Diese Methode wird nur bei lokalen Verbindungen unterstützt .
Fette Hervorhebung von mir.
Sie verbinden sich mit localhost
, die keine "lokale Verbindung" ist , obwohl es das Wort "lokal" enthält. Es ist eine TCP/IP-Verbindung zu 127.0.0.1. Wikipedia auf localhost:
Auf modernen Computersystemen localhost
da ein Hostname im 127.0.0.0/8
in eine IPv4-Adresse übersetzt wird (Loopback) Netzblock, normalerweise 127.0.0.1
, oder ::1
in IPv6.
Einfache Lösung für lokale Verbindungen
Lassen Sie den Parameter -h
weg aus dem psql
Aufruf. Zitieren des Handbuchs auf psql
noch einmal:
Wenn Sie den Hostnamen weglassen, verbindet sich psql über einen Unix-Domain-Socket zu einem Server auf dem lokalen Host oder über TCP/IP zu localhost
auf Rechnern, die keine Unix-Domain-Sockets haben.
Windows
... hat keine Unix-Domain-Sockets, pg_hba.conf
Zeilen beginnend mit local
sind unter Windows nicht anwendbar. Unter Windows verbinden Sie sich über localhost
standardmäßig, was uns zurück zum Anfang bringt.
Wenn Ihre Sicherheitsanforderungen lax sind, könnten Sie einfach allen Verbindungen über localhost
vertrauen :
host all all 127.0.0.1/32 trust
Ich würde das nur zum Debuggen mit ausgeschalteten Remoteverbindungen tun. Für etwas mehr Sicherheit können Sie die SSPI-Authentifizierung unter Windows verwenden. Fügen Sie diese Zeile zu pg_hba.conf
hinzu für "lokale" Verbindungen:
host all all 127.0.0.1/32 sspi
Falls Sie tatsächlich ein Passwort benötigen
Sie könnten Legen Sie eine Umgebungsvariable fest , aber davon wird abgeraten , insbesondere für Windows. Das Handbuch:
PGPASSWORD
verhält sich genauso wie der Verbindungsparameter password. Die Verwendung dieser Umgebungsvariablen wird aus Sicherheitsgründen nicht empfohlen, da einige Betriebssysteme es Nicht-Root-Benutzern erlauben, Prozessumgebungsvariablen über ps zu sehen; Ziehen Sie stattdessen die Verwendung von ~/.pgpass
in Betracht Datei (siehe Abschnitt 32.15).
Das Handbuch zu psql
:
Eine conninfo
string ist eine Alternative zur Angabe von Verbindungsparametern:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Oder eine URI , die anstelle eines Datenbanknamens verwendet wird:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Passwortdatei
Aber es ist normalerweise vorzuziehen, eine .pgpass
einzurichten Datei anstatt Passwörter in Skriptdateien zu schreiben.
Lesen Sie das kurze Kapitel im Handbuch sorgfältig durch. Beachten Sie insbesondere, dass hier ...
Ein Hostname von localhost
stimmt sowohl mit TCP (Hostname localhost
) und Unix-Domain-Socket (pghost
leer oder das Standard-Socket-Verzeichnis) Verbindungen, die von der lokalen Maschine kommen.
Der genaue Pfad hängt vom System ab. Diese Datei kann Passwörter für mehrere Kombinationen aus Rolle und Port (DB-Cluster) speichern:
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
Unter Windows Maschinen suchen nach der Datei in:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
wird normalerweise aufgelöst in:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.