Pojawia się błąd:
FATAL: Peer authentication failed for user "postgres"
kiedy próbuję sprawić, aby postgres działał z Railsami.
Oto mój pg_hba.conf
, mój database.yml
i zrzut pełnego śladu .
Zmieniłem uwierzytelnianie na md5 w pg_hba i próbowałem różnych rzeczy, ale żadna z nich nie działa.
Próbowałem także utworzyć nowego użytkownika i bazę danych zgodnie z Rails 3.2, FATAL: Uwierzytelnienie użytkownika nie powiodło się (PG :: Błąd)
Ale nie pojawiają się na pgadminie, ani nawet kiedy biegam sudo -u postgres psql -l
.
Masz pomysł, gdzie się mylę?
ruby-on-rails
postgresql
zamówienie1
źródło
źródło
localhost
ale uda się127.0.0.1
.host: localhost
dodatabase.yml
pliku.Odpowiedzi:
Problemem jest nadal Twój
pg_hba.conf
plik (/etc/postgresql/9.1/main/pg_hba.conf*
).Ta linia:
Powinien być:
* Jeśli nie możesz znaleźć tego pliku, uruchomienie
locate pg_hba.conf
powinno pokazywać, gdzie jest plik.Po zmianie tego pliku nie zapomnij zrestartować serwera PostgreSQL. Jeśli korzystasz z Linuksa, byłoby to możliwe
sudo service postgresql restart
.Są to krótkie opisy obu opcji zgodnie z oficjalnymi dokumentami PostgreSQL dotyczącymi metod uwierzytelniania .
Uwierzytelnianie rówieśnicze
Uwierzytelnianie za pomocą hasła
Przykładowa lokalizacja dla
pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
źródło
/etc/init.d/postgresql reload
/etc/postgresql/9.1/main/pg_hba.conf
sudo service postgreql restart
również działa.Po zainstalowaniu Postgresql wykonałem poniższe kroki.
otwórz plik
pg_hba.conf
dla Ubuntu, w którym będzie on/etc/postgresql/9.x/main
i zmień ten wiersz:do
Uruchom ponownie serwer
Zaloguj się do psql i ustaw hasło
Wreszcie zmień
pg_hba.conf
zdo
Po zrestartowaniu serwera postgresql możesz uzyskać do niego dostęp za pomocą własnego hasła
Szczegóły metod uwierzytelniania:
w celu uzyskania dalszych informacji sprawdź tutaj
źródło
sudo passwd postgres
Jeśli łączysz się przez localhost (127.0.0.1), nie powinieneś doświadczać tego konkretnego problemu. Nie zrobiłbym wiele z pg_hba.conf, ale zamiast tego dostosowałbym twój ciąg połączenia:
gdzie użytkownik to użytkownik, z którym się łączysz, a baza danych to baza danych, z którą użytkownik ma uprawnienia do łączenia się.
Oto, co robię na Debianie, aby skonfigurować postgres:
Cieszyć się!
źródło
host: 127.0.0.1
domyślny na localhost w config / database.yml - jest na tej samej maszynie, więc nie rozumiem dlaczegoTo zadziałało dla mnie !!
źródło
Jeśli masz problem, musisz go zlokalizować
pg_hba.conf
. Polecenie to:find / -name 'pg_hba.conf' 2>/dev/null
a następnie zmień plik konfiguracyjny:
Postgresql 9.3
Postgresql 9.4
Następnym krokiem jest: Ponowne uruchomienie instancji db:
service postgresql-9.3 restart
Jeśli masz jakieś problemy, musisz ponownie ustawić hasło:
ALTER USER db_user with password 'db_password';
źródło
W moim przypadku:
Zostanie to zmienione na:
Logowanie administracyjne bazy danych przez gniazdo domeny Unix lokalne wszystkie postgres peer
To:
Logowanie administracyjne bazy danych przez gniazdo domeny Unix wszystkie lokalne postgres md5
Następnie zrestartuj serwer pg:
$> sudo service postgresql restart
Poniżej znajduje się lista metod używanych do łączenia się z postgres:
Uwaga: Jeśli jeszcze go nie utworzyłeś, opublikuj postgres użytkownika. Utwórz to i teraz możesz uzyskać dostęp do serwera Postgres przy użyciu poświadczeń tego użytkownika.
WSKAZÓWKA: Jeśli nie działa po ponownym uruchomieniu postgres, zamknij terminal i otwórz ponownie.
źródło
To rozwiązało mój problem
źródło
Miałem ten sam problem.
Rozwiązanie od depa jest absolutnie poprawne.
Upewnij się tylko, że masz skonfigurowanego użytkownika do korzystania z PostgreSQL.
Sprawdź plik:
Zgoda na ten plik powinna zostać udzielona użytkownikowi, u którego zarejestrowałeś swój psql.
Dalej. Jeśli jesteś dobry do tej pory ...
Zaktualizuj zgodnie z instrukcjami @ depa.
to znaczy
a następnie wprowadź zmiany.
źródło
-rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
Jeśli chcesz zachować domyślną konfigurację, ale chcesz autoryzacji md5 z połączeniem gniazdowym dla jednego konkretnego połączenia użytkownik / db, dodaj linię „lokalną” PRZED linią „lokalną wszystko / wszystko”:
źródło
Przenosiłem katalog danych na sklonowany serwer i miałem problemy z zalogowaniem się jako postgres. Zresetowanie takiego hasła postgres działało dla mnie.
źródło
Powyższe zmiany działały dla mnie, gdy zorientowałem się, że po ich wykonaniu muszę zrestartować serwer Postgres. W przypadku Ubuntu:
źródło
Zmiana elementu równorzędnego METHOD na zaufanie do pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | linia 85) rozwiązuje problem. Dodanie md5 wymaga podania hasła, dlatego jeśli istnieje potrzeba unikania używania haseł, użyj zaufania zamiast md5 .
źródło
Użyj
host=localhost
w połączeniu.źródło
poniższe polecenie działa dla mnie:
źródło
-W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
Musisz tylko ustawić METODĘ na zaufanie.
I przeładuj serwer Postgres.
Zmiany w pg_hba.conf nie wymagają RESTART serwera postgres. po prostu RELOAD.
źródło
Wiele innych odpowiedzi dotyczy ustawień w różnych plikach konfiguracyjnych, a te dotyczące do
pg_hba.conf
mają zastosowanie i są w 100% poprawne. Upewnij się jednak, że modyfikujesz prawidłowe pliki konfiguracyjne .Jak wspomnieli inni, lokalizacje plików konfiguracyjnych można zastąpić różnymi ustawieniami w głównym pliku konfiguracyjnym, a także podać ścieżkę do głównego pliku konfiguracyjnego w wierszu polecenia z
-D
opcją.Możesz użyć następującego polecenia podczas sesji psql, aby pokazać, gdzie czytane są twoje pliki konfiguracyjne (zakładając, że możesz uruchomić psql). To tylko krok rozwiązywania problemów, który może pomóc niektórym osobom:
Powinieneś także upewnić się, że katalog domowy użytkownika postgres jest tam, gdzie się spodziewasz. Mówię to, ponieważ dość łatwo to przeoczyć, ponieważ monit wyświetla „
~
” zamiast rzeczywistej ścieżki do katalogu domowego, co sprawia, że nie jest to takie oczywiste. W wielu instalacjach domyślny katalog domowy użytkownika postgres to/var/lib/pgsql
.Jeśli nie jest ustawiony na taki, jaki powinien być, zatrzymaj usługę postgresql i użyj następującego polecenia, gdy jesteś zalogowany jako root. Upewnij się także, że użytkownik postgres nie jest zalogowany do innej sesji:
Na koniec upewnij się, że zmienna PGDATA jest ustawiona poprawnie, wpisując
echo $PGDATA
, co powinno dać wynik podobny do:Jeśli nie jest ustawiony lub pokazuje coś innego niż się spodziewasz, sprawdź pliki startowe lub RC, takie jak .profile lub .bash.rc - będzie się to znacznie różnić w zależności od systemu operacyjnego i powłoki. Po określeniu poprawnego skryptu uruchamiania dla komputera możesz wstawić następujące elementy:
W moim systemie umieściłem
/etc/profile.d/profile.local.sh
go tak, aby był dostępny dla wszystkich użytkowników.Powinieneś być teraz w stanie zainicjować bazę danych jak zwykle, a wszystkie ustawienia ścieżki psql powinny być poprawne!
źródło
pg_config służy do informacji o kompilacji, aby pomóc rozszerzeniom i programom klienckim kompilować i łączyć się z PostgreSQL. Nic nie wie o aktywnych instancjach PostgreSQL na komputerze, tylko pliki binarne.
pg_hba.conf może pojawić się w wielu innych miejscach, w zależności od sposobu instalacji Pg. Standardową lokalizacją jest pg_hba.conf w katalogu danych bazy danych (która może znajdować się w katalogu / home, / var / lib / pgsql, / var / lib / postgresql / [wersja] /, / opt / postgres / itd. Itd. Itd.) ale użytkownicy i pakujący mogą je umieścić w dowolnym miejscu. Niestety.
Jedynym prawidłowym sposobem znalezienia pg_hba.conf jest zapytanie działającej instancji PostgreSQL, gdzie jest pg_hba.conf, lub zapytanie sysadmin, gdzie ona jest. Nie możesz nawet polegać na pytaniu, gdzie znajduje się datadir i analizowaniu pliku postgresql.conf, ponieważ skrypt inicjujący może przekazać parametr taki jak -c plik_ba_bba = / some / other / path podczas uruchamiania Pg.
Co chcesz zrobić, to zapytać PostgreSQL:
Ta komenda musi być uruchomiona w sesji superużytkownika, więc dla skryptów powłoki możesz napisać coś takiego:
i ustaw zmienne środowiskowe PGUSER, PGDATABASE itp., aby upewnić się, że połączenie jest prawidłowe.
Tak, jest to w pewnym sensie problem z kurczakiem i jajkiem, ponieważ jeśli użytkownik nie może się połączyć (powiedzmy, po zepsuciu edycji pg_hba.conf), nie możesz znaleźć pg_hba.conf, aby go naprawić.
Inną opcją jest przyjrzenie się wynikowi polecenia ps i sprawdzenie, czy argument -D katalogu danych postmaster -D jest tam widoczny, np
ponieważ pg_hba.conf znajdzie się w katalogu danych (chyba że korzystasz z Debiana / Ubuntu lub jakiejś pochodnej i używasz ich pakietów).
Jeśli celujesz w konkretne systemy Ubuntu z PostgreSQL zainstalowanym z pakietów Debian / Ubuntu, staje się to trochę łatwiejsze. Nie musisz mieć do czynienia z ręcznie skompilowanym ze źródła Pg, dla którego ktoś zainicjował katalog danych w swoim katalogu domowym, lub instalację EnterpriseDB Pg w / opt itp. Możesz zapytać pg_wrapper, Debian / Ubuntu multi -version Pg manager, gdzie PostgreSQL używa komendy pg_lsclusters z pg_wrapper.
Jeśli nie możesz się połączyć (Pg nie działa lub musisz edytować plik pg_hba.conf, aby się połączyć), musisz przeszukać system w poszukiwaniu plików pg_hba.conf. W systemach Mac i Linux wystarczy coś takiego jak sudo find / -type f -name pg_hba.conf. Następnie sprawdź plik PG_VERSION w tym samym katalogu, aby upewnić się, że jest to poprawna wersja PostgreSQL, jeśli masz więcej niż jedną. (Jeśli pg_hba.conf znajduje się w / etc /, zignoruj to, zamiast tego jest to nazwa katalogu nadrzędnego). Jeśli masz więcej niż jeden katalog danych dla tej samej wersji PostgreSQL, musisz spojrzeć na rozmiar bazy danych, sprawdź wiersz poleceń uruchomionego postgresu z ps, aby sprawdzić, czy argument katalogu danych -D pasuje do miejsca, w którym edytujesz itp. . /ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
źródło
Mój problem polegał na tym, że nie wpisałem żadnego serwera. Myślałem, że jest domyślny z powodu symbolu zastępczego, ale kiedy wpisałem localhost, zadziałało.
źródło
Jeśli próbujesz zlokalizować ten plik w chmurze 9, możesz to zrobić
Naciśnij,
I
aby edytować / wstawić, naciśnijESC
3 razy, a typ:wq
zapisze plik i wyjdzieźródło
Jeśli masz do czynienia z tym problemem z szynami i wiesz, że już utworzyłeś tę nazwę użytkownika z hasłem wraz z prawidłowymi prawami, wystarczy umieścić następujące na końcu pliku database.yml.
ogólny plik będzie wyglądał jak poniżej
W ogóle nie musisz dotykać
pg_hba.conf
pliku. Szczęśliwego kodowaniaźródło
Najprostsze rozwiązanie bez zmiany konfiguracji. (ubuntu) Zmień użytkownika, a następnie połącz się z bazą danych cli.
zaczerpnięte z https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
źródło