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.conf
soubor se načte při spuštění a když hlavní serverový proces obdržíSIGHUP
signá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