Zapomniane hasło Windows PostgreSQL

31

Dziś rano próbowałem połączyć bazę danych PostgreSQL na pulpicie Windows 7 Professional.

Wartością domyślną jest „postgres”, ale na pewno zapomniałem hasła, którego użyłem podczas pierwszej instalacji.

Poszukałem go i znalazłem post związany z resetowaniem hasła. Postępowałem zgodnie z instrukcjami, ale efekt końcowy jest nieco inny niż wspomniany w poście. Użyłem-

net user postgres postgres

zresetować hasło do mojej bazy danych, ale zamiast komunikatu o powodzeniu otrzymuję:

„Wystąpił błąd systemowy 5. Odmowa dostępu.”

błąd systemu. Jak uniknąć tego błędu i zresetować hasło?

AKIWEB
źródło

Odpowiedzi:

33

(Uwaga: Niewiele z tego dotyczy czytelników używających PostgreSQL 9.2 lub nowszych z instalatorów EDB, którzy mają teraz znacznie uproszczoną domyślną instalację przy użyciu NETWORK SERVICE, chociaż nadal można konfigurować inne konta) .


Kiedyś net user postgres postgres zresetowałem hasło do mojej bazy danych, ale zamiast wiadomości o sukcesie otrzymuję"System error 5 has occurred. Access is denied."

Zresetowałeś (lub próbowałeś zresetować) hasło do konta usługi. PostgreSQL nie działa jako Administrator ze względów bezpieczeństwa, a instalator zazwyczaj konfiguruje go z kontem użytkownika „postgres” w PostgreSQL 9.1 i starszych 1 . W systemie Windows nie można uruchomić usługi jako użytkownik bez zapisania hasła użytkownika w rejestrze, więc to właśnie robi instalator.

Jeśli zmienisz hasło do konta użytkownika Windows postgres, usługa PostgreSQL nie będzie mogła zostać uruchomiona. Więc nie rób tego, musisz naprawić konfigurację usługi, aby przechowywać zaktualizowane hasło.

Na szczęście myślę, że kolejny błąd uniemożliwił ci to. Wygląda na to, że prawdopodobnie uruchamiasz wiersz polecenia bez użycia opcji „Uruchom jako administrator” na nieuprzywilejowanym koncie użytkownika systemu Windows lub na komputerze z funkcją UAC, więc nie działa z uprawnieniami dostępu wymaganymi do zmiany hasła postgresużytkownika.

Zanim spróbujesz zmienić to hasło, upewnij się, że to naprawdę to, co chcesz zrobić. Jaki problem próbujesz tutaj rozwiązać? Czy próbujesz zainstalować aktualizację bazy danych lub coś, co prosi o hasło dla postgresużytkownika systemu Windows?

Najprawdopodobniej próbujesz zalogować się do bazy danych. W tym celu używasz (niestety całkowicie niezwiązanego) hasła zapisanego w bazie danych. Ponieważ go zgubiłeś / zapomniałeś, musisz go zresetować:

  • Znajdź swój pg_hba.conf, zwykle wC:\Program Files\PostgreSQL\9.1\data\pg_hba.conf
  • W razie potrzeby ustaw uprawnienia do niego, aby móc je modyfikować; Twoje konto użytkownika może nie być w stanie tego zrobić, dopóki nie użyjesz karty bezpieczeństwa w oknie dialogowym właściwości, aby dać sobie to prawo za pomocą zastąpienia administratora. Alternatywnie, znajdź Notatnik / Notatnik ++ w menu Start, kliknij prawym przyciskiem myszy, wybierz „Uruchom jako administrator”, a następnie użyj Plik-> Otwórz, aby otworzyć w pg_hba.conften sposób.
  • Edytuj go, aby ustawić linię „host” dla użytkownika „postgres” na hoście „127.0.0.1/32” na „zaufanie”. Możesz dodać linię, jeśli jej nie ma; wystarczy wstawić:

    host all postgres 127.0.0.1/32 trust
    host all postgres ::1/128      trust # if IPv6 is in use
    

    przed innymi liniami. (Możesz zignorować komentarze, linie zaczynające się od #).

  • Uruchom ponownie usługę PostgreSQL z panelu sterowania usług (start-> uruchom-> services.msc)

  • połącz używając psql lub PgAdmin-III lub cokolwiek innego
  • ALTER USER postgres PASSWORD 'postgres'
  • usuń dodaną linię pg_hba.conflub zmień ją z powrotem
  • uruchom ponownie PostgreSQL.

Zobacz: Jak zresetować hasło Postgres do PostgreSQL w systemie Windows?


1. 9.2 używa teraz NETWORKSERVICEkonta, które nie wymaga hasła, więc ten problem znika .

Craig Ringer
źródło
8
Możesz także potrzebować wpisu ip6: „hostuj wszystkie postgres :: 1/128 trust”
Ted Elliott
Nadal nie mam problemów z postreSQL 9.6 na mojej maszynie deweloperskiej. Nie wiem, dlaczego ludzie myślą, że to nie pomaga> 9.2
tourdownunder
@darwindave Zależy od instalacji. Jeśli zainstalowałeś NETWORKSERVICEkonto użytkownika, nie ma hasła do konta serwisowego. Jeśli zainstalowano, aby korzystać z dedykowanego konta usługi, takiego jak postgreskonto domeny, może to pomóc.
Craig Ringer
Czy możesz zaktualizować tę odpowiedź do wersji 9.2+, która pokazuje obie metody dla systemu Windows?
Evan Carroll,
1
@EvanCarroll Jeśli używasz, NETWORK SERVICEnie ma hasła do zresetowania. W przypadku instalacji w wersji 9.2+ przy użyciu innego konta obowiązują te same informacje. I nie ma zmiany w części dotyczącej resetowania hasła do konta bazy danych administratora postgres . Tak naprawdę nie są potrzebne żadne zmiany.
Craig Ringer
3

Musisz rozróżnić między użytkownikiem systemu (Windows) o nazwie „postgres” a użytkownikiem bazy danych o tej samej nazwie.

Znajdź plik pg_hba.conf - kontroluje to dostęp do serwera PostgreSQL. Będziesz musiał go edytować jako użytkownik z uprawnieniami administratora. Poszukaj linii, które wspominają użytkownika „postgres” i tymczasowo ustaw tryb na „zaufanie”. Uruchom ponownie postgresql, a wtedy powinieneś być w stanie połączyć się bez hasła. Zresetuj hasło, a następnie przywróć oryginalne ustawienia pliku i uruchom ponownie PostgreSQL.

Podręcznik zawiera szczegółowe informacje na temat metod uwierzytelniania i pliku pg_hba.conf .

Richard Huxton
źródło