Pokračujte ve čtení, nejlepší možnosti jsou až na konci . Nejprve si ale ujasněme pár věcí.
Pouze umlčte požadavek na heslo
Pokud je vaším problémem pouze výzva k zadání hesla, můžete jej umlčet. Zde cituji manuál:
-w
--no-password
Nikdy nevyžadujte heslo. Pokud server vyžaduje ověření heslem a heslo není dostupné jinými prostředky, jako je
.pgpass
soubor, pokus o připojení se nezdaří. Tato volba může být užitečná v dávkových úlohách a skriptech, kde není přítomen žádný uživatel pro zadání hesla. (...)
Pravděpodobně nepotřebujete heslo
Normálně je to zbytečné. Výchozí superuživatel databáze postgres
obvykle odpovídá stejnojmennému uživateli systému. Spuštění psql
z tohoto účtu nevyžaduje heslo, pokud je metoda ověřování peer
nebo ident
jsou nastaveny ve vašem pg_hba.conf
soubor. Pravděpodobně máte řádek jako tento:
local all postgres peer
A obvykle také:
local all all peer
To znamená, že každý místní uživatel se může přihlásit do všech databáze jako uživatel databáze stejného jména bez hesla.
Nicméně , je zde běžná mylná představa. Znovu cituji:
Tato metoda je podporována pouze u místních připojení .
Tučné zdůraznění min.
Připojujete se k localhost
, což není „místní připojení“ , i když má v sobě slovo „místní“. Je to připojení TCP/IP k 127.0.0.1. Wikipedie na localhost:
Na moderních počítačových systémech
localhost
jako název hostitele se překládá na adresu IPv4 v127.0.0.0/8
(loopback) síťový blok, obvykle127.0.0.1
, nebo::1
v IPv6.
Jednoduché řešení pro místní připojení
Vynechejte parametr -h
z psql
vyvolání. Citace manuálu na psql
ještě jednou:
Pokud vynecháte název hostitele, psql se připojí přes zásuvku domény Unix na server na místním hostiteli nebo přes TCP/IP na
localhost
na strojích, které nemají sokety unixové domény.
Windows
... nemá sokety unixové domény, pg_hba.conf
řádky začínající local
nejsou použitelné na Windows. V systému Windows se připojujete přes localhost
ve výchozím nastavení, což nás přivádí zpět na začátek.
Pokud jsou vaše požadavky na zabezpečení laxní, můžete důvěřovat všem připojením přes localhost
:
host all all 127.0.0.1/32 trust
Udělal bych to pouze pro ladění s vypnutým vzdáleným připojením. Pro větší zabezpečení můžete v systému Windows použít ověřování SSPI. Přidejte tento řádek do pg_hba.conf
pro „místní“ připojení:
host all all 127.0.0.1/32 sspi
Pokud skutečně potřebujete heslo
Mohli byste nastavte proměnnou prostředí , ale to se nedoporučuje , zejména pro Windows. Manuál:
PGPASSWORD
chová se stejně jako parametr připojení hesla. Použití této proměnné prostředí se z bezpečnostních důvodů nedoporučuje, protože některé operační systémy umožňují uživatelům, kteří nejsou root, vidět proměnné prostředí procesu prostřednictvím ps; místo toho zvažte použití~/.pgpass
soubor (viz oddíl 32.15).
Manuál na psql
:
conninfo
řetězec je alternativou k zadání parametrů připojení:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Nebo URI , který se používá místo názvu databáze:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Soubor s heslem
Obvykle je však vhodnější nastavit .pgpass
soubor místo vkládání hesel do souborů skriptů.
Přečtěte si pozorně krátkou kapitolu v manuálu. Zejména si všimněte, že zde ...
Název hostitele
localhost
odpovídá oběma TCP (název hostitelelocalhost
) a soket domény Unix (pghost
prázdný nebo výchozí adresář soketu) připojení pocházející z místního počítače.
Přesná cesta závisí na systému. Tento soubor může ukládat hesla pro více kombinací role a portu (klastr DB):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
V systému Windows stroje hledají soubor v:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
obvykle řeší:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.