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-passwordNikdy nevyžadujte heslo. Pokud server vyžaduje ověření heslem a heslo není dostupné jinými prostředky, jako je
.pgpasssoubor, 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
localhostjako název hostitele se překládá na adresu IPv4 v127.0.0.0/8(loopback) síťový blok, obvykle127.0.0.1, nebo::1v 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
localhostna 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:
PGPASSWORDchová 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í~/.pgpasssoubor (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:example@sqldat.com: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
localhostodpovídá oběma TCP (název hostitelelocalhost) a soket domény Unix (pghostprá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\ .