Jak mogę odzyskać swoją nazwę użytkownika i hasło MySQL?

158

Zgubiłem nazwę użytkownika i hasło MySQL. Jak mogę to odzyskać?

Marcel
źródło

Odpowiedzi:

186

Zatrzymaj proces MySQL.

Uruchom proces MySQL z opcją --skip-grant-table.

Uruchom klienta konsoli MySQL z opcją -u root.

Wymień wszystkich użytkowników;

SELECT * FROM mysql.user;

Zresetuj hasło;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Ale NIE ZAPOMNIJ do

Zatrzymaj proces MySQL

Uruchom proces MySQL normalnie (tj. Bez opcji --skip-grant-table)

kiedy kończysz. W przeciwnym razie bezpieczeństwo Twojej bazy danych może zostać naruszone.

Xenph Yan
źródło
7
Myślisz, że nie musisz ponownie uruchamiać demona, aby zresetować zwykłych użytkowników. po prostu „FLUSH PRIVILEGES”; po aktualizacji hasła użytkownika. --skip-grant-table wymagane tylko do resetowania hasła użytkownika root! Generalnie nie jest to zalecane w przypadku standardowego resetowania użytkownika.
Amos Folarin
Jakie jest znaczenie użycia dpkg-reconfigure mysql-server-5.5polecenia do resetowania hasła root MySQL?
phillipsK
@Xenph, dlaczego mówisz „ Uruchom klienta konsoli MySQL z opcją -u root ”? Nie ma sensu tego robić, ponieważ -ujest to ignorowane przy uruchamianiu serwera --skip-grant-tables.
Pacerier
15
W MySQL 5.7. * Nie ma mysql.userwywoływanej kolumny password, użyj authentication_stringzamiast tego.
Adib Aroui,
3
Uważam, że ten + stackoverflow.com/a/35277160/1604601 jest bardzo pomocny
Alien Life Form
42

Niestety Twoje hasło użytkownika jest nieodwracalne. Został zaszyfrowany jednokierunkowym hashem, który, jeśli nie wiesz, jest nieodwracalny. Polecam pójść z Xenph Yan powyżej i po prostu utwórz nowy.

Możesz również skorzystać z następującej procedury z podręcznika, aby zresetować hasło dla dowolnego konta root MySQL w systemie Windows:

  1. Zaloguj się do swojego systemu jako Administrator.
  2. Zatrzymaj serwer MySQL, jeśli jest uruchomiony. W przypadku serwera działającego jako usługa systemu Windows przejdź do Menedżera usług:

Menu Start -> Panel sterowania -> Narzędzia administracyjne -> Usługi

Następnie znajdź usługę MySQL na liście i zatrzymaj ją. Jeśli serwer nie działa jako usługa, może być konieczne użycie Menedżera zadań, aby wymusić jego zatrzymanie.

  1. Utwórz plik tekstowy i umieść w nim następujące instrukcje. Zastąp hasło hasłem, którego chcesz używać.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    Każda instrukcja UPDATE i FLUSH musi być zapisana w jednym wierszu. Instrukcja UPDATE resetuje hasło dla wszystkich istniejących kont root oraz FLUSH nakazuje serwerowi ponowne załadowanie tabel grantów do pamięci.

  2. Zapisz plik. W tym przykładzie plik będzie miał nazwę C: \ mysql-init.txt.
  3. Otwórz okno konsoli, aby przejść do wiersza poleceń:

    Menu Start -> Uruchom -> cmd

  4. Uruchom serwer MySQL ze specjalną opcją --init-file :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Jeśli zainstalowałeś MySQL w lokalizacji innej niż C: \ mysql , odpowiednio dostosuj polecenie.

    Serwer wykonuje podczas uruchamiania zawartość pliku o nazwie --init-file , zmieniając każdy z nich katalog główny hasło konta .

    Możesz także dodać opcję --console opcję do polecenia, jeśli chcesz, aby dane wyjściowe serwera pojawiały się w oknie konsoli, a nie w pliku dziennika.

    Jeśli zainstalowałeś MySQL za pomocą Kreatora instalacji MySQL, może być konieczne określenie opcji --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    Odpowiednie ustawienie --defaults-file można znaleźć za pomocą Menedżera usług:

    Menu Start -> Panel sterowania -> Narzędzia administracyjne -> Usługi

    Znajdź usługę MySQL na liście, kliknij ją prawym przyciskiem myszy i wybierz opcję Właściwości. Pole Ścieżka do pliku wykonywalnego zawiera plik --defaults-file .

  5. Po pomyślnym uruchomieniu serwera usuń C: \ mysql-init.txt .
  6. Zatrzymaj serwer MySQL, a następnie uruchom go ponownie w trybie normalnym. Jeśli uruchamiasz serwer jako usługę, uruchom go w oknie Usługi systemu Windows. Jeśli uruchamiasz serwer ręcznie, użyj dowolnego polecenia, którego zwykle używasz.

Powinieneś teraz być w stanie połączyć się z MySQL jako root przy użyciu nowego hasła.

Jake
źródło
5
@Jake - dzięki za odpowiedź. Chciałem dać temu aprobatę, ale z jakiegoś powodu przepełnienie stosu nie pozwala mi na to z powodu punktów reputacji. Twoje wyjaśnienie „niestety hasło użytkownika jest nieodwracalne. Zostało zaszyfrowane za pomocą jednokierunkowego skrótu, który, jeśli nie wiesz, jest nieodwracalny”, było kluczem do mojego zrozumienia, dlaczego wszystko inne, co czytałem TYLKO w Google, dawało mi wskazówki, jak zmienić moje hasło. dobre wyjaśnienia są bardziej wnikliwe niż same instrukcje.
dsdsdsdsd
1
@jake Nie mogę znaleźć mysql na liście usług. Powiedz mi, co mam robić?
1
Dlaczego jest twój mysqld-ntzamiast mysqld?
Pacerier
Przy okazji, czy jest opcja nieplików --init-file? (Coś podobnego do --executepolecenia
mysql.exe
34

Ulepszenie najbardziej przydatnej odpowiedzi tutaj:

1] Nie ma potrzeby ponownego uruchamiania serwera mysql
2] Problem dotyczący bezpieczeństwa serwera MySQL podłączonego do sieci

Nie ma potrzeby ponownego uruchamiania serwera MySQL.

użyj FLUSH PRIVILEGES;po aktualizacji instrukcji mysql.user do zmiany hasła.

Instrukcja FLUSH instruuje serwer, aby ponownie załadował tabele grantów do pamięci, aby zauważył zmianę hasła.

--skip-grant-optionsPozwala każdemu, aby połączyć bez hasła i ze wszystkimi przywilejami. Ponieważ jest to niebezpieczne, możesz chcieć

użyj --skip-grant-table w połączeniu z --skip-networking, aby uniemożliwić zdalnym klientom połączenie.

from: reference: resetting-permissions-generic

ThinkingMonkey
źródło
@ThinkingMonkey, czy to nie zakłada, że ​​aktualnie zalogowany użytkownik ma uprawnienia do modyfikowania mysql.user? Jednak często tak nie jest.
Pacerier
6

Chociaż nie możesz bezpośrednio odzyskać hasła MySQL bez brutalnego forsowania, może istnieć inny sposób - jeśli użyłeś MySQL Workbench do połączenia się z bazą danych i zapisałeś poświadczenia w „skarbcu”, jesteś złoty.

W systemie Windows poświadczenia są przechowywane w % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - zaszyfrowane za pomocą CryptProtectData (bez dodatkowej entropii). Odszyfrowanie jest łatwe:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Lub możesz sprawdzić ten wątek DonationCoder dla źródła i pliku wykonywalnego szybkiej i brudnej implementacji.

snemarch
źródło
2
To było idealne. W wątku snemarch znajduje się plik exe z kodem źródłowym, o którym wspomniano, aby odzyskać hasło do konta użytkownika przechowywane w skarbcu MySQL Workbench. Chociaż te inne metody prawdopodobnie również zadziałałyby, gdybym miał uprawnienia do odczytu lub aktualizacji tabeli użytkowników.
RobbZ
Jednak stosunkowo niewiele osób korzysta z Workbencha.
Pacerier
Oto kolejna implementacja, którą można uruchomić po skompilowaniu
bnp887
6

Zrób to bez przestojów

Uruchom następujące polecenie w terminalu, aby połączyć się z DBMS (potrzebujesz uprawnień administratora):

sudo mysql -u root -p;

uruchom hasło aktualizacji użytkownika docelowego (dla mojej przykładowej nazwy użytkownika mousavii jego hasła musi to być 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

w tym momencie musisz wykonać rzut, aby zastosować zmiany:

FLUSH PRIVILEGES;

Gotowe! Zrobiłeś to bez zatrzymywania lub restartowania usługi mysql.

SMMousavi
źródło
5

Jeśli masz uprawnienia roota do serwera, na którym działa mysql, powinieneś zatrzymać serwer mysql za pomocą tego polecenia

sudo service mysql stop

Teraz uruchom mysql za pomocą tego polecenia

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Teraz możesz zalogować się do mysql za pomocą

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Pełne instrukcje można znaleźć tutaj http://www.techmatterz.com/recover-mysql-root-password/

Sajjad Ashraf
źródło
3

Zaloguj się do MySql z Windows cmd przy użyciu istniejącego użytkownika:

mysql -u nazwa użytkownika -p
Wpisz hasło: ****

Następnie uruchom następujące polecenie:

mysql> SELECT * FROM mysql.user;

Następnie skopiuj zaszyfrowane hasło md5 dla odpowiedniego użytkownika i istnieje kilka aplikacji do odszyfrowania hasła online dostępnych w Internecie. Używając tego odszyfrowanego hasła i użyj go do zalogowania się następnym razem. lub zaktualizuj hasło użytkownika za pomocą polecenia:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Następnie zaloguj się przy użyciu nowego hasła i użytkownika.

Radosny islam
źródło
0

JEŚLI masz skonfigurowane ODBC, możesz uzyskać hasło z pliku konfiguracyjnego ODBC. Znajduje się w /etc/odbc.ini dla systemu Linux oraz w folderze Software / ODBC w rejestrze systemu Windows (jest ich kilka - może to zająć trochę poszukiwań)

sampleize1
źródło
0

Zapisz plik. W tym przykładzie plik będzie miał nazwę C: \ mysql-init.txt. prosi o uprawnienia administracyjne do zapisania pliku

user12261119
źródło
-1

Chociaż ścisła, logiczna, informatyczna interpretacja pytania operatora wymagałaby zarówno „Jak mogę odzyskać moją nazwę użytkownika MySQL”, jak i „hasła” - pomyślałem, że może być przydatne dla kogoś, kto również zajmie się operacją LUB interpretacji . Innymi słowy ...

1) Jak mogę odzyskać swoją nazwę użytkownika MySQL?

LUB

2) hasło

Wydaje się, że ten ostatni warunek został już obszernie rozwiązany, więc nie będę się tym przejmować. Poniżej przedstawiono rozwiązanie dla samego przypadku „Jak odzyskać moją nazwę użytkownika MySQL”. CZEŚĆ.

Aby znaleźć swoją nazwę użytkownika mysql, uruchom następujące polecenia z powłoki mysql ...

WYBIERZ użytkownika z mysql.user;

wypisze tabelę wszystkich użytkowników mysql.

połysk
źródło
1
To jest późna odpowiedź i powinieneś ją publikować tylko wtedy, gdy Twoje rozwiązanie wyraźnie różni się od już opublikowanego lub zaakceptowanego. Nie w tym przypadku, zwłaszcza, że ​​Twoja odpowiedź jest identyczna z zaakceptowaną.
m.cekiera