GNU/Linux >> Znalost Linux >  >> Linux

Postgres neumožňuje localhost, ale pracuje s 127.0.0.1

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 SQL pg_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

Linux
  1. Bashscript funguje z terminálu, ale ne z Crontabu?

  2. Stáhnout obrázek Funguje ve Firefoxu, ale ne v Internet Exploreru

  3. Příkaz sed s volbou -i selže na Macu, ale funguje na Linuxu

  1. Spusťte skript pomocí rc.local:skript funguje, ale ne při spouštění

  2. Jak si vyžádám soubor, ale neuložím jej pomocí Wget?

  3. Proč Tomcat pracuje s portem 8080, ale ne s 80?

  1. Pycharm tensorflow ImportError, ale funguje dobře s Terminálem

  2. Grep řádky začínající 1, ale ne 10, 11, 100 atd

  3. Povolení FTP s IPTables