sql >> Database >  >> RDS >> PostgreSQL

Voer een batchbestand uit met de opdracht psql zonder wachtwoord

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 de 127.0.0.0/8 (loopback) netblok, meestal 127.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 (hostnaam localhost ) 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\ .



  1. SQL-zelfstudie:One-stop-oplossing om SQL te leren

  2. De naam van de primaire sleutelbeperking voor meerdere tabellen in de SQL Server-database wijzigen - SQL Server / TSQL-zelfstudie, deel 64

  3. MySQL Create View, Replace View en Drop View Statements met voorbeelden

  4. convert_tz retourneert null