Zapominanie haseł zdarza się najlepszym z nas. Jeśli zapomnisz lub stracisz hasło administratora do bazy danych MySQL lub MariaDB, nadal możesz uzyskać dostęp i zresetować hasło, jeśli posiadasz dostęp do serwera i konta użytkownika z włączonym sudo.
W tym artykule omówimy sposób resetowania hasła administratora dla starszych i nowszych wersji MySQL i MariaDB.
Będziemy potrzebowali
Aby odzyskać hasło administratora MySQL/MariaDB, będziesz potrzebować:
- dostępu do serwera Linux z MySQL lub MariaDB z użytkownikiem sudo.
Identyfikacja wersji bazy danych
Większość współczesnych dystrybucji Linuksa jest dostarczana z MySQL lub MariaDB, popularnym zamiennikiem, który jest w pełni kompatybilny z MySQL. W zależności od użytej bazy danych i jej wersji musisz użyć różnych poleceń, aby odzyskać hasło administratora.
Możesz sprawdzić swoją wersję za pomocą następującego polecenia:
mysql --version
W przypadku MySQL, otrzymasz następujący rezultat:
Dane wyjściowe MySQL
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Albo następujący rezultat dla MariaDB:
Dane wyjściowe MariaDB
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Zanotuj, której bazy danych i której wersji używasz, ponieważ będziesz korzystać z tych informacji później. Następnie musisz zatrzymać bazę danych, aby uzyskać do niej dostęp ręcznie.
Zatrzymywanie serwera bazy danych
Aby zmienić hasło administratora, musisz wcześniej zatrzymać serwer bazy danych.
Dla bazy MySQL możesz to zrobić poniższym poleceniem:
sudo systemctl stop mysql
Dla bazy MariaDB – takim:
sudo systemctl stop mariadb
Po zatrzymaniu serwera bazy danych uzyskasz do niego dostęp ręcznie, aby zresetować hasło administratora.
Ponowne uruchomienie serwera bazy danych bez sprawdzania uprawnień
Jeśli uruchomisz MySQL i MariaDB bez wczytania informacji o uprawnieniach użytkownika, pozwoli ci to uzyskać dostęp do wiersza poleceń bazy danych z uprawnieniami administratora bez podawania hasła. Pozwoli ci to uzyskać dostęp do bazy danych, nie znając go.
Aby to zrobić, musisz powstrzymać bazę danych przed wczytaniem tabel uprawnień, które przechowują informacje o uprawnieniach użytkownika. Ponieważ jest to trochę ryzykowne z punktu widzenia bezpieczeństwa, należy również pominąć sieć, aby uniemożliwić innym klientom nawiązywanie połączeń.
Uruchom bazę danych bez ładowania tabel uprawnień i włączania sieci:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Znak ampersand na końcu tego polecenia spowoduje, że proces ten będzie działał w tle, dzięki czemu będziesz mógł nadal korzystać z terminala.
Teraz możesz połączyć się z bazą danych jako użytkownik root, co nie powinno spowodować pytania o hasło.
mysql -u root
Zamiast tego natychmiast zobaczysz shell bazy danych.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Teraz, gdy masz dostęp do konta administratora, możesz zmienić jego hasło.
Zmiana hasła administratora
Jednym prostym sposobem zmiany hasła roota dla nowszych wersji MySQL jest użycie polecenia ALTER USER. Jednak to polecenie teraz nie zadziała, ponieważ tabele uprawnień nie są wczytane.
Powiedzmy serwerowi bazy danych, aby ponownie załadował tabele uprawnień, wydając polecenie FLUSH PRIVILEGES.
FLUSH PRIVILEGES;
Teraz możemy zmienić hasło administratora.
W przypadku MySQL 5.7.6 i nowszych, a także MariaDB 10.1.20 i nowszych, użyj następującego polecenia:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'nowe_haslo';
W przypadku MySQL 5.7.5 i starszych, a także MariaDB 10.1.20 i starszych, użyj:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nowe_haslo');
Pamiętaj, aby zastąpić nowe_haslo nowym wybranym hasłem.
Uwaga: jeśli polecenie ALTER USER nie działa, zwykle oznacza to większy problem. Możesz jednak spróbować UPDATE … SET, aby zamiast tego zresetować hasło administratora.
UPDATE mysql.user SET authentication_string = PASSWORD('nowe_haslo') WHERE User = 'root' AND Host = 'localhost';
Pamiętaj, aby po tym ponownie załadować tabele uprawnień.
W obu przypadkach powinieneś zobaczyć potwierdzenie, że polecenie zostało wykonane pomyślnie.
Query OK, 0 rows affected (0.00 sec)
Hasło zostało zmienione, dzięki czemu można teraz zatrzymać ręczną instancję serwera bazy danych i zrestartować go tak, jak wcześniej.
Uruchom ponownie serwer bazy danych w standardowy sposób
Najpierw zatrzymaj instancję serwera bazy danych, którą ręcznie uruchomiłeś w kroku 3. To polecenie wyszukuje PID lub identyfikator procesu MySQL lub MariaDB i wysyła SIGTERM, aby nakazał mu płynne zakończenie działania po wykonaniu operacji czyszczenia.
W przypadku MySQL, użyj polecenia:
sudo kill `cat /var/run/mysqld/mysqld.pid`
W przypadku MariaDB, skorzystaj z:
sudo kill `/var/run/mariadb/mariadb.pid`
Następnie uruchom ponownie usługę za pomocą systemctl.
MySQL:
sudo systemctl start mysql
MariaDB:
sudo systemctl start mariadb
Teraz możesz potwierdzić, że nowe hasło zostało poprawnie zastosowane, uruchamiając:
mysql -u root -p
Polecenie powinno teraz wyświetlać monit o podanie nowego hasła. Wpisz go, a powinieneś uzyskać dostęp do terminala bazy danych zgodnie z oczekiwaniami.
Podsumowanie
Masz teraz dostęp administratora do przywróconego serwera MySQL lub MariaDB. Upewnij się, że nowe hasło administratora jest silne i bezpieczne i przechowuj je w bezpiecznym miejscu.