Как сбросить пароль пользователя MySQL или MariaDB в Ubuntu 18.04

Вступление

Забывание паролей происходит с лучшими из нас. Если вы забудете или потеряете парольroot к своей базе данных MySQL или MariaDB, вы все равно сможете получить доступ и сбросить пароль, если у вас есть доступ к серверу и учетная запись пользователя с привилегиямиsudo.

[.note] #Note: В свежих установках Ubuntu 18.04 конфигурация MySQL или MariaDB по умолчанию обычно позволяет вам получить доступ к базе данных (с полными административными привилегиями) без ввода пароля, если вы устанавливаете соединение с системногоroot аккаунт. В этом случае сброс пароля может не потребоваться. Перед тем как продолжить сброс пароля базы данныхroot, попробуйте получить доступ к базе данных с помощью командыsudo mysql. Если это приводит к ошибкеaccess denied, выполните действия, описанные в этом руководстве.
#

В этом руководстве показано, как сбросить парольroot для баз данных MySQL и MariaDB, установленных с помощью диспетчера пакетовapt в Ubuntu 18.04. Процедура смены пароля root отличается в зависимости от того, установлена ​​ли у вас MySQL или MariaDB, а также от конфигурации systemd по умолчанию, поставляемой с дистрибутивом или пакетами других поставщиков. Хотя инструкции в этом руководстве могут работать с другими версиями системы или сервера базы данных, они были специально протестированы с Ubuntu 18.04 и поставляемыми дистрибутивами.

Предпосылки

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

  • Доступ к серверу Ubuntu 18.04 под управлением MySQL или MariaDB с пользователем sudo или другим способом доступа к серверу с привилегиями root. Чтобы опробовать методы восстановления, описанные в этом руководстве, не затрагивая ваш рабочий сервер, используйтеinitial server setup tutorial для создания тестового сервера с обычным пользователем без полномочий root с привилегиями sudo. Затем установите MySQL послеHow to install MySQL on Ubuntu 18.04.

[[step-1 -—- identify-the-database-version-and-stopping-the-server]] == Шаг 1 - Определение версии базы данных и остановка сервера

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

Проверьте свою версию с помощью следующей команды:

mysql --version

Если вы используете MariaDB, в выводе вы увидите «MariaDB», которому предшествует номер версии:

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

Вы увидите вывод, подобный этому, если вы используете MySQL:

MySQL outputmysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper

Запишите, какая база данных, так как это определяет соответствующие команды, которым нужно следовать в оставшейся части этого урока.

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

sudo systemctl stop mariadb

Для MySQL завершите работу сервера базы данных, выполнив:

sudo systemctl stop mysql

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

[[шаг-2 -—- перезапуск-сервер-базы-данных-без-проверок-разрешений]] == Шаг 2 - Перезапуск сервера базы данных без проверок разрешений

Запуск MySQL и MariaDB без проверки прав доступа позволяет получить доступ к командной строке базы данных с правами суперпользователя без предоставления действительного пароля. Для этого вам необходимо запретить базе данных загружатьgrant tables, в которых хранится информация о привилегиях пользователей. Так как это представляет небольшую угрозу безопасности, вы также можете отключить работу сети, чтобы другие клиенты не могли подключиться к временно уязвимому серверу.

В зависимости от того, какой сервер базы данных вы установили, способ запуска сервера без загрузкиgrant tables различается.

Настройка 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.

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

sudo mysql -u root

Вы сразу увидите приглашение оболочки базы данных:

MariaDB promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

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

Настройка MySQL для запуска без предоставления таблиц

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

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

sudo systemctl edit mysql

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

Сервис MySQL переопределяет

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking

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

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

Перезагрузите конфигурациюsystemd, чтобы применить эти изменения:

sudo systemctl daemon-reload

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

sudo systemctl start mysql

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

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

sudo mysql -u root

Вы сразу увидите приглашение оболочки базы данных:

MySQL promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

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

[[step-3 -—- change-the-root-password]] == Шаг 3 - Изменение пароля root

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

Скажите серверу базы данных перезагрузить таблицы предоставления, введя командуFLUSH PRIVILEGES.

FLUSH PRIVILEGES;

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

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

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

UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

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

Вы увидите следующие выходные данные для каждого оператора:

OutputQuery OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

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

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

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

UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

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

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

Перезапустим базу данных в обычном рабочем режиме.

[[step-4 -—- return-your-database-server-to-normal-settings]] == Шаг 4. Возврат сервера базы данных к нормальным настройкам

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

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

sudo systemctl unset-environment MYSQLD_OPTS

Затем перезапустите службу, используяsystemctl:

sudo systemctl restart mariadb

Для MySQL удалите измененную конфигурацию systemd:

sudo systemctl revert mysql

Вы увидите вывод, похожий на следующий:

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

Затем перезагрузите конфигурацию systemd, чтобы применить изменения:

sudo systemctl daemon-reload

Наконец, перезапустите сервис:

sudo systemctl restart mysql

База данных теперь перезапущена и возвращается в нормальное состояние. Убедитесь, что новый пароль работает, войдя в систему как пользовательroot с паролем:

mysql -u root -p

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

Заключение

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

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

Related