PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Batch-Datei mit psql-Befehl ohne Passwort ausführen

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\ .