Problém
Postgres bude potenciálně používat IPv6 při zadání -h localhost což je dané výše uvedeným pg_hba.conf určuje ident , zobrazí se výzva k zadání hesla.
Když však -h 127.0.0.1 je zadáno, nutí Postgres používat IPv4 , který je nastaven na trust ve výše uvedené konfiguraci a umožňuje přístup bez hesla.
Odpověď
Řešením je tedy upravit hostitelský řádek IPv6 v pg_hba.conf použít trust :
# IPv6 local connections:
host all all ::1/128 trust
Nezapomeňte restartovat službu Postgres po provedení změn v konfiguraci.
V pg_hba.conf, první shoda se počítá. Manuál:
První záznam s odpovídajícím typem připojení, adresou klienta, požadovanou databází a uživatelským jménem se používá k provedení autentizace. Neexistuje žádný „propad“ nebo „záloha“:pokud je vybrán jeden záznam a ověření selže, další záznamy nebudou považováno. Pokud se norecord shoduje, přístup je odepřen.
Všimněte si obráceného pořadí :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
Ale:
host all all localhost ident
host all all localhost trust
Nezapomeňte znovu načíst po uložení změn do pg_hba.conf . (Restart není nutný.) Manuál:
pg_hba.confsoubor se načte při spuštění a když hlavní serverový proces obdržíSIGHUPsignál. Pokud soubor upravujete na aktivním systému, budete muset dát signál poštmistrovi (pomocípg_ctl reload,volání funkce SQLpg_reload_conf()nebo pomocíkill -HUP), aby bylo možné znovu přečíst soubor.
Pokud opravdu "přidáte" řádky, jak jste napsal, nemělo by to mít vůbec žádný efekt. Ale pokud nahradíte čáry, tam je.
V prvním případě získáte trust metoda ověřování, což je zásada otevřených dveří. Manuál:
PostgreSQL předpokládá, že každý, kdo se může připojit k serveru, je oprávněn přistupovat k databázi s jakýmkoli uživatelským jménem databáze, které určí (dokonce i se jmény superuživatelů)
Ale ve druhém případě dostanete ident autentizační metoda, která musí být správně nastavena, aby fungovala.
Navíc, jak Cas poukázal později, localhost pokrývá IPv4 i IPv6, zatímco 127.0.0.1/32 platí pouze pro IPv4.
Pokud skutečně používáte zastaralou verzi 8.4, přejděte na starou příručku pro 8.4. Jste si vědomi toho, že verze 8.4 dosáhla EOL v roce 2014 a již není podporována? Zvažte upgrade na aktuální verzi.
V Postgresu 9.1 nebo novějším byste raději použili peer než ident .
Více:
- Spusťte dávkový soubor pomocí příkazu psql bez hesla