Postgresql: uwierzytelnianie hasłem nie powiodło się dla użytkownika „postgres”


431

Zainstalowałem PostgreSQL 8.4, klienta Postgres i Pgadmin 3. Uwierzytelnianie nie powiodło się dla użytkownika „postgres” zarówno dla klienta konsoli, jak i Pgadmin. Wpisałem użytkownika jako „postgres” i hasło „postgres”, ponieważ wcześniej działało. Ale teraz uwierzytelnianie nie powiodło się. Zrobiłem to kilka razy bez tego problemu. Co powinienem zrobić? A co się stanie

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

1
W moim przypadku połączenie nie powiedzie się, ponieważ hasło jest zbyt złożone ...
JJD

3
Przeczytaj całą tę stronę. Musiałem zrobić kilka rzeczy, aby to zadziałało. Najpierw ALTERkrok , potem edycja mojego pg_hba.confpliku , a następnie ponowne uruchomienie postgres .
elrobis


Upewnij się również, że nie masz uruchomionych dwóch instancji Postgres: jedna w systemie Windows, druga w Docker. Docker nie zgłosił mi, że port jest już zajęty. Tak więc narzędzie połączone z maszyną Windows Postgres, podczas gdy w postgerach Dockera wszystko było w porządku.
koppor

Odpowiedzi:


750

Jeśli dobrze pamiętam, użytkownik postgresnie ma domyślnie ustawionego hasła DB w systemie Ubuntu. Oznacza to, że możesz zalogować się na to konto tylko przy użyciu konta postgres użytkownika systemu operacyjnego .

Zakładając, że masz rootdostęp do skrzynki, możesz:

sudo -u postgres psql

Jeśli database "postgres" does not existsbłąd się nie powiedzie , najprawdopodobniej nie jesteś na serwerze Ubuntu lub Debian :-) W takim przypadku po prostu dodaj template1do polecenia:

sudo -u postgres psql template1

Jeśli dowolne z tych poleceń nie powiedzie się z błędem, psql: FATAL: password authentication failed for user "postgres"sprawdź plik /etc/postgresql/8.4/main/pg_hba.conf: Musi istnieć taki wiersz jako pierwszy wiersz bez komentarza:

local   all         postgres                          ident

W przypadku nowszych wersji PostgreSQL identmoże być peer. To też OK.

Wewnątrz psqlpowłoki możesz podać użytkownikowi DB postgres hasło:

ALTER USER postgres PASSWORD 'newPassword';

Możesz opuścić psqlpowłokę, wpisując CtrlDlub za pomocą polecenia \q.

Teraz powinieneś być w stanie podać pgAdmin poprawne hasło dla administratora DB, a on również będzie szczęśliwy. :-)


To lepiej, dziękuję! psql działa. Ale nadal mam problemy z pgadmin3 - poprosił mnie o hasło dla mojego użytkownika root systemu. (dziwne dla mnie) pg_hba.conf tak jak mówisz.
I159,

Dodałbym, aby następnie wyjść z konsoli za pomocą „\ q”. Zajęło mi to trochę czasu, aby to znaleźć :)
hakunin,

2
Zauważ, że pg_hba.conf musi mieć ustawionego użytkownika postgres ident, aby pierwsze kroki działały. Jeśli ustawiłeś go już na md5 lub coś innego, nie będziesz mógł się automatycznie zalogować.
Cerin

80
Bardzo fajny. Dla innych nowych użytkowników NIE ZAPOMNIJ SEMICOLONU na końcu linii ALTER USER.
itsols

3
@itsols Powiedziałeś: „Bardzo fajny. Dla innych nowych użytkowników, NIE ZAPOMNIJ SEMICOLONU na końcu linii ALTER USER”… Właśnie zakończyłeś czterogodzinną próbę !! Czuję się teraz taka głupia i wdzięczna. :-D
frozenjim

148

Odpowiedź personelu jest poprawna, ale jeśli chcesz dalej automatyzować, możesz:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

Gotowy! Zapisałeś User = postgres i hasło = postgres.

Jeśli nie masz hasła do użytkownika postgres ubuntu:

$ sudo passwd postgres


Ostrożnie, jeśli hasło zawiera ciekawe znaki, takie jak „!”
Brian Peterson

45

Było to frustrujące, większość powyższych odpowiedzi jest poprawna, ale nie wspominają, że musisz zrestartować usługę bazy danych, zanim zmiany w pliku pg_hba.conf zostaną uwzględnione.

więc jeśli dokonasz zmian, jak wspomniano powyżej:

local all postgres ident

następnie zrestartuj jako root (na centos jest to coś jak usługa service restart postgresql-9.2) teraz powinieneś być w stanie uzyskać dostęp do bazy danych jako użytkownik postgres

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

Mam nadzieję, że to dodaje informacje dla nowych użytkowników Postgres


26
W przypadku systemu Ubuntu: sudo service postgresql restart
Ann Kilzer

4
do użytku RHEL7sudo systemctl restart postgresql.service
Spechal

1
Co powiesz na Mac?
AustinT

1
W przypadku komputerów Mac
sprawdź

Dzięki Miguel. Ręcznie zmieniłem hasło, a mój pgAdmin nie nawiązał połączenia z bazą danych, dopóki nie zrestartuję serwera Postgres.
Ustin

20

Edytuj plik pg_hba.conf, np. Za pomocą sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

Zmień wszystkie metody uwierzytelniania na trust. Zmień hasło uniksowe dla użytkownika „postgres”. Uruchom ponownie serwer. Zaloguj się psql -h localhost -U postgresi użyj właśnie ustawionego hasła uniksowego. Jeśli to działa, możesz ponownie ustawić plik pg_hba.conf na wartości domyślne.


1
Jeśli utkniesz całkowicie, jest to jedyna gwarantowana metoda. Zmień wszystkie metody na zaufane, zrestartuj db, a następnie jako root:, następnie sudo su - postgresustaw / napraw / usuń hasło dla postgres db (i w powłoce, jeśli to konieczne), następnie przywróć bezpieczne md5lub identmetody i zrestartuj ponownie, aby wartości pozostały. Nawiasem mówiąc, w Cent / RedHat 9.4 plik znajduje się w:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK

17

Dla tych, którzy używają go po raz pierwszy i nie mają informacji o tym, jakie jest hasło, mogą wykonać następujące kroki (zakładając, że korzystasz z Ubuntu):

  1. Otwórz plik pg_hba.conf w/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2. edytuj poniższy wiersz

     local   all             postgres                                peer

    do

     local   all             postgres                                trust
  2. Uruchom ponownie serwer

      sudo service postgresql restart
  3. Wreszcie możesz zalogować się bez hasła, jak pokazano na rysunkuWreszcie możesz zalogować się bez hasła, jak pokazano na rysunku

Zobacz tutaj, aby uzyskać więcej informacji


12

Jeśli próbujesz zalogować powłokę postgres jako użytkownik postgres, możesz użyć następujących poleceń.

przełącz się na użytkownika postgres

# su - postgres

zaloguj się do psql

# psql

Mam nadzieję, że to pomaga


3
su - postgresprosi o hasło do posgresql 9.5 na Ubuntu 16.04
Prashanth Chandra

3
su - postgresto polecenie sugerowane przez oficjalną dokumentację Fedory , ale ja również otrzymuję monit o podanie hasła. Aby obejść, że po tej wiadomości e-mail postgres forum , który używa tego samego polecenia jako przyjęty odpowiedź tutaj: sudo -u postgres psql. Nie zapomnij zainicjować i uruchomić serwer bazy danych.
icc97

11

Spróbuj nie używać parametru -W i pozostaw hasło puste. Czasami użytkownik jest tworzony bez hasła.

Jeśli to nie zadziała, zresetuj hasło. Można to zrobić na kilka sposobów, ale działa to na wielu systemach:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';

7

Ogólna zasada: NIGDY NIE POWINIENEŚ SIĘ USTAWIĆ HASŁA DLA UŻYTKOWNIKA POSTGRES .

Jeśli potrzebujesz dostępu administratora z pgAdmin, utwórz innego administratora. W ten sposób, jeśli dane uwierzytelniające dla tego superużytkownika zostaną naruszone, zawsze możesz ssh do rzeczywistego hosta bazy danych i ręcznie usunąć superużytkownika za pomocą

sudo -u postgres -c "DROP ROLE superuser;"

1
Jaki jest powód tej ogólnej zasady?
Gershom

2
Abyś nigdy nie mógł uzyskać zgody wszystkich swoich superużytkowników.
ardilgulez

1
W jaki sposób ustawienie hasła dla postgres może prowadzić do narażenia wszystkich superużytkowników?
Gershom

4
ustawienie hasła nie prowadzi do narażenia wszystkich superużytkowników, ale brak ustawienia hasła zagwarantuje, że nigdy nie będzie to zagrożone. Powód jest taki: jeśli nie ustawisz hasła, każda próba zalogowania się do hasła użytkownika postgres zostanie odrzucona, podczas gdy możesz nadal używać go samodzielnie przez zaufanie.
ardilgulez

7

Gdy znajdziesz się w powłoce postgres, wprowadź to polecenie

postgres=# \password postgres

Po wprowadzeniu tego polecenia pojawi się monit o ustawienie hasła, po prostu ustaw hasło, a następnie spróbuj.


3

Po zainstalowaniu postgresql nie ustawiono hasła dla postgres użytkownika, należy jawnie ustawić je w systemie Unix za pomocą polecenia:

sudo passwd postgres

Poprosi Cię o hasło sudo, a następnie poda nowe hasło użytkownika Postgres. Źródło


0

Chciałem tylko dodać, że powinieneś również sprawdzić, czy hasło wygasło.

Aby uzyskać szczegółowe informacje, zobacz Uwierzytelnianie hasłem Postgres nie powiedzie się .


1
Dodaj szczegółowe informacje i podsumowanie tego, co zapewnia ten link, na wypadek gdyby w przyszłości link już nie istniał. W przeciwnym razie może to oznaczać odpowiedź niskiej jakości / tylko łącze.
Tanner


0

Oto kilka kombinacji, które próbowałem zalogować:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres

0

miałem podobny problem. Ubuntu pozostawił mi logowanie do konsoli przy użyciu dowolnego hasła dla administratora. Z wyjątkiem sytuacji, gdy połączyłem się z -h localhost w linii psql.

Zauważyłem też, że „localhost: 8080 / MyJSPSiteLogIn” - pokazał: Fatal: błąd uwierzytelnienia dla użytkownika „user”.

pg_hba.conf był w porządku.

Zauważyłem, że w tej samej usłudze działały dwie wersje postgresu.

Rozwiązany - odinstalowanie wersji inutil.


0

Miałem podobny problem. Podczas uzyskiwania dostępu do dowolnej bazy danych wyświetlałem się poniżej monitu po zaktualizowaniu hasła „uwierzytelnienie hasła nie powiodło się dla użytkownika„ postgres ”w PGAdmin


Rozwiązanie:

  1. Zamknij serwer Postgres
  2. Uruchom ponownie pgadmin
  3. pgadmin poprosi o hasło.
  4. Wprowadź aktualne hasło wspomnianego użytkownika

Mam nadzieję, że to rozwiąże problem

wprowadź opis zdjęcia tutaj


-1

Mam nadzieję, że pomoże ci to w krótkim czasie. Możesz zmienić hasło do postgres sql za pomocą poniższej komendy.

Komenda

sudo -u postgres psql

Następnie możesz zaktualizować hasło

Komenda

Zmień hasło użytkownika postgres „YOUR_NEW_PASSWORD”;


1
Twoja odpowiedź zawiera tylko informacje, które zostały już dodane: stackoverflow.com/a/7696398/8283469
L. Guthardt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.