Table of Contents
Сброс пароль пользователя root в MySQL
Определяем версию сервера бд
Для сброса пароля root, необходимы различные действия в зависимости от того, какая СУБД установлена – MySQL или MariaDB. Определяем:
mysql --version # Вывод MySQL mysql Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu)) # Вывод MariaDB mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Перезапуск сервера базы данных без проверки прав доступа
Запуск MySQL и MariaDB без проверки прав доступа позволяет получить доступ к командной строке базы данных с привилегиями root без указания действующего пароля. Для этого необходимо запретить базе данных загружать таблицы разрешений –skip-grant-tables
, в которых хранится информация о привилегиях пользователя. Поскольку это представляет собой определенный риск для безопасности, также, рекомендуется отключить сетевое взаимодействие, чтобы предотвратить подключение других клиентов к временно уязвимому серверу.
Сброс пароля root MySQL
Способ 1
Останавливаем сервис:
sudo /etc/init.d/mysql stop
Теперь, следует убедиться, что директория /var/run/mysqld
существует и установлен правильный владелец.
sudo mkdir /var/run/mysqld sudo chown mysql /var/run/mysqld
Запускаем MySQL с опцией –skip-grant-tables
в фоновом режиме:
sudo mysqld_safe --skip-grant-tables&
И видим приблизительно такой отбой:
2022-05-30T08:54:47.543996Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2022-05-30T08:54:47.564220Z mysqld_safe Starting mysqld daemon with databases from /mnt/volume-nyc1-01/mysql
Заходим пользователем root без пароля
sudo mysql --user=root mysql
И сбрасываем пароль:
Для MySQL 8
UPDATE mysql.user SET authentication_string=null WHERE User='root'; flush privileges; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@$$w0rd'; flush privileges;
Для MySQL 5.7
update user set authentication_string=PASSWORD('P@$$w0rd') where user='root'; update user set plugin="mysql_native_password" where User='root'; flush privileges;
Для MySQL 5.7
update user set Password=PASSWORD('P@$$w0rd') where user='root'; update user set plugin="mysql_native_password" where User='root'; flush privileges;
Проверка нового пароля
Перед повторным запуском демона, убедимся, что все процессы MySQL остановлены:
sudo killall -u mysql 2022-05-30T09:26:49.336864Z mysqld_safe mysqld from pid file /mnt/volume-nyc1-01/mysql/vpn-ikev.pid ended
sudo /etc/init.d/mysql start
И авторизуемся с новым паролем:
mysql -p -u root
Способ 2
Настраиваем MySQL, на запуск без Grant Tables
sudo systemctl stop mysql sudo systemctl edit mysql
И добавляем вот такие строки в файл (в моем случае открылся временный файл, заполненный комментариями):
[Service] ExecStart= ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
Первый оператор ExecStart
очищает значение по умолчанию, а второй указывает systemd новую команду запуска, включая параметры для отключения загрузки таблиц разрешений и сетевых возможностей.
Очень важно, данный файл следует сохранять под именем /etc/systemd/system/mysql.service.d/override.conf
Далее перезагружаем конфигурацию systemd:
sudo systemctl daemon-reload
И запускаем сервер MySQL:
sudo systemctl start mysql
Подключаемся к базе данных как пользователь root:
sudo mysql -u root
И производим установку нового пароля как описано в первом способе
После установки пароля, возвращаем сервер бд в исходное состояние. Удаляем измененную конфигурацию systemd:
sudo systemctl revert mysql
перезагрузим конфигурацию systemd, для применения изменений:
sudo systemctl daemon-reload
И, наконец, перезапустим демон MySQL:
sudo systemctl restart mysql
Сброс пароля root в MariaDB
Отключаем сервер бд:
sudo systemctl stop mariadb
Для того, чтобы запустить сервер MariaDB без grant tables, укажем дополнительных параметров для демона сервера MariaDB.
Установим переменную окружения MYSQLD_OPTS
, используемую MariaDB при запуске. Параметры –skip-grant-tables
и –skip-networking
указывают MariaDB на запуск без загрузки таблиц грантов и сетевых функций:
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
И запустим сервер MariaDB:
sudo systemctl start mariadb
Сервер бд, будет перезапущен с учетом новых настроек переменных среды.
Теперь, можно подключиться к базе данных как пользователь root без ввода пароля:
sudo mysql -u root
Далее, установим пароль для учетной записи root:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@$$w0rd';
MariaDB позволяет использовать кастомные механизмы аутентификации, поэтому выполним следующие два оператора, чтобы убедиться, что MariaDB будет использовать механизм аутентификации по умолчанию для нового пароля:
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root'; UPDATE mysql.user SET plugin = '' WHERE user = 'root';
Чтобы перезапустить сервер базы данных в обычном режиме, следует отменить сделанные ранее изменения: включить сеть, а также загрузить таблицы предоставлений.
Отключаем переменную среды MYSQLD_OPTS, установленную ранее:
sudo systemctl unset-environment MYSQLD_OPTS
И перезапускаем демон:
sudo systemctl revert mysql
Далее, перезагрузим конфигурацию systemd, чтобы применить изменения:
sudo systemctl daemon-reload
И наконец, перезапускаем сам демон:
sudo systemctl restart mysql
Заходим на сервер MariaDB с новым паролем:
mysql -u root -p