Zapomniałem hasła, które podałem podczas instalacji Postgres

205

Zapomniałem lub wpisałem (podczas instalacji) hasło do domyślnego użytkownika Postgres. Nie mogę go uruchomić i pojawia się następujący błąd:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

Czy zresztą zresetować hasło lub jak utworzyć nowego użytkownika z uprawnieniami administratora?

Jestem nowy w Postgres i właśnie zainstalowałem go po raz pierwszy. Próbuję go używać z Railsami i korzystam z systemu Mac OS X Lion.

hilarl
źródło
1
Nie mogę jeszcze komentować odpowiedzi, więc musisz to zrobić w ten sposób. Zrobiłem to, co powiedział SaiyanGirl, jednak wciąż musiałem wprowadzić hasło, które było „postgres”, aby się zalogować, a następnie mogłem zresetować hasło
Pascale

Odpowiedzi:

359
  1. znajdź plik pg_hba.conf- może znajdować się na przykład w /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  2. Utwórz kopię zapasową

    cp pg_hba.conf pg_hba.conf-backup

  3. umieść następujący wiersz (jako pierwszy wiersz bez komentarza lub jako jedyny):

W przypadku wszystkich poniższych sytuacji (lokalna i hosta), exepct sekcja replikacji, jeśli jej nie masz, należy ją zmienić w następujący sposób, nie powinno być obecne uwierzytelnianie MD5 ani Peer.

local  all   all   trust
  1. zrestartuj serwer PostgreSQL (np. w systemie Linux :)

    sudo /etc/init.d/postgresql restart

    Jeśli usługa (demon) nie rozpoczyna raportowania w pliku dziennika:

    połączenia lokalne nie są obsługiwane przez tę kompilację

    powinieneś się zmienić

    local all all trust

    do

    host all all 127.0.0.1/32 trust

  2. możesz teraz połączyć się jako dowolny użytkownik. Połącz jako superużytkownik postgres(uwaga, nazwa superużytkownika może być inna w twojej instalacji. Na przykład w niektórych systemach nazywa się to pgsql. )

    psql -U postgres

    lub

    psql -h 127.0.0.1 -U postgres

    (zauważ, że przy pierwszym poleceniu nie zawsze będziesz połączony z hostem lokalnym)

  3. Zresetuj hasło („zamień moją_nazwa_użytkownika na postgres, ponieważ resetujesz użytkownika postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. Przywróć stary pg_hba.conf, jak to jest bardzo niebezpieczne , aby zachować wokół

    cp pg_hba.conf-backup pg_hba.conf

  5. zrestartuj serwer, aby uruchomić sejf pg_hba.conf

    sudo /etc/init.d/postgresql restart

Dalsze informacje na temat tego pliku pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

Arsen7
źródło
9
A potem zacząć psql? Ciągle pojawia się monit o hasło i nie wiem
CodyBugstein
4
ta odpowiedź NIE zadziałała dla mnie, po zrobieniu kroku 3 usługa się nie uruchamia, nie wiem, może to system operacyjny (W8), po prostu nie działa.
Scaramouche,
3
ktoś dla Windows?
Mahesha999,
2
Należy pamiętać o kolejności wpisów w pg_hba.conf jest ważna. Jeśli dodasz „lokalnie wszystkie zaufanie” na końcu pliku, nie będzie działać zgodnie z oczekiwaniami, ponieważ wcześniejsze rekordy zostaną dopasowane w pierwszej kolejności. Więc umieść to na górze pliku, aby mieć to, czego oczekujesz.
Tagar
6
Jeśli korzystasz z systemu Windows z tym błędem, przewijaj do odpowiedzi @SaiyanGirl. Po prostu zmień kolumny METHOD istniejących wpisów na „zaufaj”, a następnie zmień je z powrotem, gdy skończysz
sean.hudson
99

Łącząc się z postgres z wiersza poleceń, nie zapomnij dodać -h localhostjako parametru wiersza polecenia. Jeśli nie, postgres spróbuje połączyć się przy użyciu trybu uwierzytelniania PEER.

Poniżej pokazano reset hasła, nieudane logowanie z uwierzytelnieniem PEER i udane logowanie przy użyciu połączenia TCP.

# sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.

postgres=# \password
Enter new password:
Enter it again:
postgres=# \q

W braku:

# psql -U postgres -W
Password for user postgres:
psql: FATAL:  Peer authentication failed for user "postgres"

Praca z -h localhost:

# psql -U postgres -W  -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=#
SaeX
źródło
7
Dziękuję za podpowiedź dotyczącą opcji „-h”, pomogło mi.
Bunkerbewohner
Niepotrzebne w Windows cmd.exe
Fabien Haddadi
1
Najlepsza odpowiedź na komputer Mac
Muhammad Umar
72

Plik pg_hba.conf( C:\Program Files\PostgreSQL\9.3\data) zmienił się od czasu udzielenia tych odpowiedzi. Co pracował dla mnie, w systemie Windows, to otworzyć plik i zmienić METHODz md5celu trust:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Następnie, używając pgAdmin III, zalogowałem się bez hasła i zmieniłem postgres'hasło użytkownika , przechodząc doFile -> Change Password

SaiyanGirl
źródło
To nie działa, ponieważ PgAdmin nadal prosi o podanie aktualnego hasła ... Zresetowałem do „zaufania” i zrestartowałem PgAdmin. Nadal nie można zresetować bez wpisania BIEŻĄCEGO hasła ...
gen b.
1
Po zmianie metody trustmożesz postępować zgodnie z tym i zmienić hasło w cmd
Gilad Green
12

Tylko uwaga, na Linuksie Możesz po prostu uruchomić, sudo su - postgresaby zostać użytkownikiem postgres, a stamtąd zmienić to, co wymagane przy użyciu psql.

Daniel
źródło
3
nadal potrzebujesz hasła po uruchomieniu psql
Snow
8
  1. Edytuj plik /etc/postgresql/<version>/main/pg_hba.confi znajdź następujący wiersz:

    local   all             postgres                                md5
  2. Edytuj linię i zmień md5na końcu trusti zapisz plik

  3. Ponownie załaduj usługę postgresql

    $ sudo service postgresql reload
  4. Spowoduje to załadowanie plików konfiguracyjnych. Teraz możesz zmodyfikować postgresużytkownika, logując się do psqlpowłoki

    $ psql -U postgres
  5. Zaktualizuj postgreshasło użytkownika

    alter user postgres with password 'secure-passwd-here';
  6. Edytuj plik /etc/postgresql/<version>/main/pg_hba.confi trustwróć do md5pliku i zapisz go

  7. Ponownie załaduj usługę postgresql

    $ sudo service postgresql reload
  8. Sprawdź, czy zmiana hasła działa

    $ psql -U postgres -W
Ray Hunter
źródło
Czy tak trudno jest podać rozwiązanie dla systemu Windows? Nie wszyscy używają Linuksa z sudo. Jak mam to zrobić w systemie Windows?
gen b.
7

Właśnie miałem ten problem w systemie Windows 10, aw moim przypadku problem polegał na tym, że właśnie działałem psqli domyślnie próbowałem zalogować się przy użyciu mojej nazwy użytkownika Windows („Nathan”), ale nie było użytkownika PostgreSQL o takiej nazwie, i to mi nie mówiło.

Rozwiązaniem było uruchomienie, psql -U postgresa nie tylko psqlhasło, które wprowadziłem podczas instalacji.

Nathan Wailes
źródło
5

Dodanie odpowiedzi dla użytkownika systemu Windows dla najnowszej wersji postgres (> 10),

Przejdź do lokalizacji instalacji postgres i wyszukaj pg_hba.conf, znajdziesz ją..\postgres\data\pg_hba.conf

Otwórz ten plik za pomocą notatnika, znajdź ten wiersz,

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections: 
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
#..

Zmień metodę z md5 na zaufanie,

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections: 
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# ...

Teraz przejdź do swojej powłoki SQL (PSQL) i pozostaw wszystko puste,

Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]: 

Tym razem nie poprosi o podanie hasła, a użytkownik zostanie zalogowany,

Teraz uruchom tę linię, ALTER USER yourusername WITH SUPERUSER

Teraz możesz opuścić powłokę za pomocą \ q

Ponownie przejdź do pliku pg_hba.conf i ponownie zmień METODĘ z trust na md5 i zapisz go.

Zaloguj się teraz, używając nowego użytkownika i hasła, i możesz sprawdzić \ du pod kątem jego atrybutów.

Bidhan Majhi
źródło
1

W przypadku instalacji systemu Windows tworzony jest użytkownik systemu Windows. I „psql” użyj tego użytkownika do połączenia z portem. Jeśli zmienisz hasło użytkownika PostgreSQL, nie zmieni ono hasła systemu Windows. Wiersz polecenia poniżej działa tylko, jeśli masz dostęp do wiersza polecenia.

Zamiast tego możesz użyć aplikacji Windows GUI „c: \ Windows \ system32 \ lusrmgr.exe”. Ta aplikacja zarządza użytkownikami utworzonymi przez system Windows. Możesz teraz zmodyfikować hasło.

cpunky
źródło
1

To, co zrobiłem, aby rozwiązać ten sam problem, to:

Otwórz plik pg_hba.conf w edytorze gedit z terminala:

sudo gedit /etc/postgresql/9.5/main/pg_hba.conf

Poprosi o hasło. Wprowadź hasło logowania administratora. Otworzy się gedit z plikiem. Wklej następujący wiersz:

host  all   all  127.0.0.1/32  trust

tuż poniżej -

# Database administrative login by Unix domain socket

Zapisz i zamknij. Zamknij terminal, otwórz go ponownie i uruchom następujące polecenie:

psql -U postgres

Wejdziesz teraz do konsoli psql. Teraz zmień hasło, wpisując to:

ALTER USER [your prefered user name] with password '[desired password]';

Jeśli mówi, że użytkownik nie istnieje, zamiast ALTERużywać CREATE.

Na koniec usuń tę linię, którą wkleiłeś w pg_hba i zapisz ją.

Inconnu
źródło
0

Jeśli jesteś w systemie Windows, możesz po prostu uruchomić

net user postgres postgres

i zaloguj się w postgres za pomocą postgres / postgres jako użytkownik / hasło

ivofernandes
źródło
0

Plik .pgpass w katalogu osobistym użytkownika lub plik, do którego odwołuje się PGPASSFILE, może zawierać hasła, których należy użyć, jeśli połączenie wymaga hasła (a hasło nie zostało określone inaczej). W systemie Microsoft Windows plik nosi nazwę% APPDATA% \ postgresql \ pgpass.conf (gdzie% APPDATA% odnosi się do podkatalogu Dane aplikacji w profilu użytkownika).

Ten plik powinien zawierać wiersze o następującym formacie:

nazwa hosta: port: baza danych: nazwa użytkownika: hasło

(Do pliku można dodać komentarz przypominający, kopiując wiersz powyżej i poprzedzając go znakiem #). Każde z pierwszych czterech pól może być wartością dosłowną lub *, która pasuje do dowolnej wartości. Zostanie użyte pole hasła z pierwszego wiersza, które odpowiada bieżącym parametrom połączenia. (Dlatego, jeśli używasz symboli wieloznacznych, umieść bardziej szczegółowe wpisy.) Jeśli wpis musi zawierać: lub \, użyj tego znaku. Nazwa hosta localhost jest zgodna z połączeniami TCP (nazwa hosta localhost) i gniazdem domeny Unix (pghost pusty lub domyślny katalog gniazd) pochodzących z komputera lokalnego. Na serwerze rezerwowym nazwa bazy danych replikacji odpowiada strumieniowym połączeniom replikacji wykonanym z serwerem głównym. Pole bazy danych ma ograniczoną użyteczność, ponieważ użytkownicy mają to samo hasło do wszystkich baz danych w tym samym klastrze.

W systemach Unix uprawnienia w .pgpass muszą uniemożliwiać dostęp do świata lub grupy; osiągnij to za pomocą komendy chmod 0600 ~ / .pgpass. Jeśli uprawnienia są mniej surowe, plik zostanie zignorowany. W systemie Microsoft Windows zakłada się, że plik jest przechowywany w bezpiecznym katalogu, więc nie przeprowadza się specjalnych kontroli uprawnień.

rahulnikhare
źródło
To działało dla mnie, gdy ścieżka rozszerzyła się do C: \ Users \ <użytkownik> \ AppData \ Roaming \ postgresql \ pgpass.conf. Pomagało również wyłączenie i włączenie serwera PostgreSQL.
geodane
0

Jeśli korzystasz z postgresql na Mac OS, spróbuj tych :

  1. Edytuj plik pg_hba.conf

  2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

  3. Zmień metodę „md5” dla wszystkich użytkowników, aby „ufali” w dolnej części pliku

  4. Znajdź nazwę usługi

  5. ls / Library / LaunchDaemons

  6. Poszukaj postgresql

  7. Zatrzymaj usługę postgresql

  8. sudo launchctl stop com.edb.launchd.postgresql-9.2

  9. Uruchom usługę postgresql

  10. sudo launchctl start com.edb.launchd.postgresql-9.2

  11. Rozpocznij sesję psql jako postgres

  12. psql -U postgres

  13. (nie powinien prosić o hasło z powodu ustawienia „zaufania”)

  14. Zresetuj hasło w sesji psql, wpisując

  15. ZMIEŃ USER postgres z hasłem „bezpieczne-nowe-hasło”;

  16. \ q
  17. wchodzić

  18. Edytuj plik pg_hba.conf

  19. Przełącz go z powrotem na „md5”

  20. Uruchom ponownie usługi

David
źródło
-1

Oto, co działało dla mnie w systemie Windows:

Zmodyfikuj lokalizacje pliku pg_hba.conf w C: \ Program Files \ PostgreSQL \ 9.3 \ data.

# IPv4 local connections: host all all 127.0.0.1/32 trust

Zmień metodę z trust na md5 i zrestartuj usługę postgres w systemie Windows.

Następnie możesz zalogować się przy użyciu użytkownika postgres bez hasła przy użyciu pgadmin. Możesz zmienić hasło używając Plik-> Zmień hasło.

Jeśli użytkownik postgres nie ma uprawnień administratora, nie możesz zmienić hasła. W takim przypadku zaloguj się do innego użytkownika (pgsql) z dostępem administratora i nadaj uprawnienia innym użytkownikom, klikając prawym przyciskiem myszy użytkowników i wybierając właściwości-> Uprawnienia roli.

Chetan
źródło