sql >> Database teknologi >  >> RDS >> PostgreSQL

Kør batchfil med psql-kommando uden adgangskode

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

Windows maskiner leder efter filen i:

%APPDATA%\postgresql\pgpass.conf

%APPDATA% løser typisk:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .



  1. Vigtigheden af ​​godt databasedesign (og 7 trin til at opnå det)

  2. Kan Postgres-datatypen NUMERIC gemme signerede værdier?

  3. Sammenligning af midlertidige tabeller til PostgreSQL og Oracle GTT

  4. Konverter 'datetime2' til 'datetime' i SQL Server (T-SQL-eksempler)