User Tools

Site Tools


root_в_mysql

Сброс пароль пользователя 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
root_в_mysql.txt · Last modified: 2023/04/06 10:28 (external edit)