Как сбросить root-пароль MySQL или MariaDB

Забыли root пароль от своей базы данных MySQL или MariaDB? От этого никто не застрахован.

Повышение безопасности клиента OpenSSH в Ubuntu
Так выглядит сброс пароля на MySQL

Если эта неприятность случилась с вами, вы все равно можете получить доступ к БД и сбросить пароль – для этого понадобится доступ к серверу и учетная запись пользователя с привилегиями sudo.

В этом руководстве мы поможем вам сбросить root пароль MySQL и MariaDB, установленных с помощью apt в Ubuntu 20.04. Процедура изменения пароля root зависит от системы управления базами данных – MySQL или MariaDB, – а также от стандартной конфигурации systemd, которая поставляется с дистрибутивом. Инструкции, описанные в этом руководстве, были протестированы в Ubuntu 20.04 и на стандартных пакетах из дистрибутива, но они могут подойти и другим версиям системы или СУБД.

Примечание: В свежих установках Ubuntu 20.04 конфигурация MySQL или MariaDB по умолчанию обычно позволяет получить полный доступ к БД (с привилегиями администратора) без ввода пароля, если соединение устанавливается из системного аккаунта root. В этом случае вы можете не сбрасывать пароль. Прежде чем приступить к сбросу root пароля базы данных, попробуйте получить доступ к БД с помощью команды sudo mysql. И только если вы получили отказ в доступе (или ранее изменили стандартную конфигурацию), выполните эти инструкции по сбросу.

Требования

Чтобы восстановить root пароль MySQL или MariaDB, вам потребуется:

  • Доступ к серверу Ubuntu 20.04, на котором работает MySQL или MariaDB, а также пользователь sudo или другой способ доступа к серверу с привилегиями root.
  • Чтобы протестировать описанные здесь методы восстановления пароля, не затрагивая ваш рабочий сервер, вы можете создать тестовый сервер и настроить его согласно этому руководству. Обязательно создайте пользователя с привилегиями sudo. Затем установите MySQL, следуя этому руководству, или MariaDB – по этим инструкциям.

Примечание: Оба руководства по установке СУБД сохраняют стандартную конфигурацию для root (которая не потребует пароля для аутентификации в БД, если вы можете получить доступ к системной учетной записи root).

1: Определение версии базы данных и остановка сервера

Ubuntu 20.04 использует либо MySQL, либо MariaDB – популярную замену, полностью совместимую с MySQL. Для восстановления пароля root нужно использовать разные команды – в зависимости от того, какую СУБД вы установили. Следуйте этому разделу, чтобы определить, какой сервер базы данных вы используете.

Чтобы узнать версию СУБД, введите:

mysql --version

Если вы используете MariaDB, это будет указано в выводе:

mysql  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Если вы используете MySQL, ваш вывод будет выглядеть примерно так:

mysql  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

Выяснив, какую СУБД вы используете, вы можете определить команды, которые следует выполнять в оставшейся части этого мануала.

Прежде чем менять пароль root, необходимо выключить сервер базы данных. Если вы используете MariaDB, вы можете сделать это с помощью команды:

sudo systemctl stop mariadb

Выключить сервер базы данных MySQL можно с помощью:

sudo systemctl stop mysql

Остановив базу данных, вы можете перезапустить ее и сбросить утраченный пароль root.

2: Перезапуск сервера базы данных без проверки прав доступа

Режим MySQL и MariaDB без проверки привилегий позволяет получить доступ к командной строке БД с правами root, не предоставляя действительного пароля. Чтобы включить этот режим, необходимо запретить базе данных загружать таблицы привилегий, в которых хранится информация о доступе пользователей. Поскольку такой режим представляет некоторую угрозу безопасности, рекомендуем также отключить сеть, чтобы другие клиенты не смогли подключиться к временно уязвимому серверу.

Процедура запуска сервера без загрузки таблиц привилегий в MariaDB и MySQL различается.

Запуск MariaDB без таблиц привилегий

Чтобы запустить сервер MariaDB без таблиц привилегий, мы воспользуемся юнит-файлом systemd – в нем нужно установить дополнительные параметры для демона сервера 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

Эта команда не выведет на экран никаких результатов, но перезапустит сервер базы данных с учетом новых настроек.

Вы можете убедиться, что сервер запущен с помощью команды:

sudo systemctl status mariadb

Теперь вы сможете подключиться к базе данных как root пользователь MariaDB без пароля:

sudo mysql -u root

На экране сразу появится командная оболочка базы данных.

Теперь, когда у вас есть доступ к серверу базы данных MariaDB, вы можете изменить пароль root – перейдите к разделу 3.

Запуск MySQL без таблиц привилегий

Чтобы запустить сервер MySQL без таблиц привилегий, нужно изменить конфигурацию systemd для MySQL: при запуске сервер должен передавать дополнительные параметры командной строки.

Для этого выполните следующую команду:

sudo systemctl edit mysql

Эта команда откроет в редакторе nano новый файл, который вы будете использовать для редактирования переопределений сервиса MySQL. Они изменяют стандартные параметры MySQL.

Этот файл сейчас пуст. Добавьте в него следующие строки:

[Service]

ExecStart=

ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

Первый оператор ExecStart сбрасывает значение по умолчанию, а второй предоставляет systemd новую команду для запуска сервиса – она содержит параметры, которые отключат загрузку таблиц привилегий и сетевые соединения.

Нажмите Ctrl-x, чтобы выйти из файла, затем y, чтобы сохранить внесенные изменения. Чтобы подтвердить имя файла, нажмите ввод.

Перезагрузите конфигурацию systemd, после чего эти изменения вступят в силу:

sudo systemctl daemon-reload

Теперь запустите сервер MySQL:

sudo systemctl start mysql

Команда не покажет на экране никаких данных, но сервер БД запустится. Таблицы привилегий и сетевые соединения буду отключены.

Подключитесь к базе данных как пользователь root:

sudo mysql -u root

Вы попадете в командную строку БД сразу, без ввода пароля.

Теперь все готово, вы можете изменить свой утерянный пароль.

3: Изменение root-пароля

Сервер базы данных работает в ограниченном режиме – без таблиц привилегий и без поддержки доступа по сети. Это позволяет вам войти на сервер без ввода пароля, но не дает выполнять команды, изменяющие данные. Чтобы сбросить root-пароль, вы должны загрузить таблицы привилегий сразу после того, как получили доступ к серверу.

Перезагрузить эти таблицы можно с помощью команды FLUSH PRIVILEGES:

FLUSH PRIVILEGES;

Теперь вы можете изменить свой пароль root. Процедура изменения пароля также зависит от вашей СУБД.

Изменение пароля MariaDB

Если вы используете MariaDB, выполните следующую команду, чтобы установить пароль для учетной записи root.

Вместо new_password нужно указать ваш новый сложный пароль:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Вы увидите следующий вывод, который сообщит об изменении пароля:

Query OK, 0 rows affected (0.001 sec)

MariaDB поддерживает пользовательские механизмы аутентификации. Выполните следующие два оператора, чтобы MariaDB могла использовать свой стандартный механизм аутентификации для нового пароля root:

UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';

UPDATE mysql.user SET plugin = '' WHERE user = 'root';

Для каждого оператора вы получите следующий результат:

Query OK, 0 rows affected (0.01 sec)

Ваш root-пароль MariaDB изменен. Введите exit, чтобы выйти из консоли БД, и перейдите к разделу 4, чтобы перезапустить сервер БД в обычном режиме.

Изменение пароля MySQL

Выполните следующий оператор, чтобы изменить пароль root пользователя MySQL. Замените new_password надежным паролем, который вы запомните.

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

MySQL поддерживает пользовательские механизмы аутентификации, поэтому данный оператор также гарантирует, что MySQL будет использовать свой стандартный механизм для root пользователя с новым паролем.

Вы увидите такой вывод, что значит, что пароль был успешно изменен:

Query OK, 0 rows affected (0.01 sec)

Теперь ваш пароль изменен. Выйдите из консоли MySQL, введя exit.

Давайте перезапустим БД в нормальном рабочем режиме.

4: Восстановление настроек сервера БД и перезапуск

Чтобы перезапустить сервер базы данных в его нормальном режиме, вы должны отменить внесенные вами изменения – то есть включить сеть и загрузить таблицы привилегий. Как и ранее, метод полностью зависит от базы данных, с которой вы работаете.

В MariaDB отключите переменную среды MYSQLD_OPTS, которую вы установили ранее:

sudo systemctl unset-environment MYSQLD_OPTS

Затем перезапустите сервис:

sudo systemctl restart mariadb

В MySQL удалите переопределения стандартных настроек systemd:

sudo systemctl revert mysql

Вы получите примерно такой вывод:

Removed /etc/systemd/system/mysql.service.d/override.conf.

Removed /etc/systemd/system/mysql.service.d.

После этого перезапустите конфигурацию и примените изменения:

sudo systemctl daemon-reload

Перезапустите сервис:

sudo systemctl restart mysql

Итак, база данных вернулась в нормальное состояние.

Убедитесь, что ваш новый пароль работает, попробуйте войти в БД как пользователь root:

mysql -u root -p

Когда вам будет предложено ввести пароль, укажите свой новый пароль, и вы получите доступ к командной строке базы данных.

Заключение

С помощью этого мануала вы восстановили административный доступ к серверу MySQL или MariaDB. Убедитесь, что новый пароль, который вы выбрали, надежный и сложный.

За дополнительной информацией об управлении пользователями, о механизмах аутентификации или способах сброса паролей баз данных для других версий MySQL или MariaDB обратитесь к официальной документации MySQL или MariaDB.

Tags: , ,

Добавить комментарий