Поиск по сайту:

Изменить метод аутентификации для корневого пользователя MySQL в Ubuntu

В этом руководстве объясняется, почему и как изменить метод аутентификации для пользователя root MySQL на метод Кеширующая подключаемая аутентификация SHA-2 или Встроенная подключаемая аутентификация в Ubuntu.

Введение

Даже если у вас есть установочный пароль для root-пользователя MySQL, вы все равно не сможете пройти аутентификацию на сервере базы данных как root пользователь с паролем. Потому что пользователь root MySQL настроен на аутентификацию с использованием плагина auth_socket по умолчанию вместо пароля в системах Ubuntu, работающих под управлением MySQL 5.7 и более поздних версий. Следовательно, вы не можете получить доступ к серверу MySQL с пользователем root и его паролем.

Даже если вы попытаетесь пройти аутентификацию как пользователь root с помощью команды:

mysql -u root -p

Вы получите следующее сообщение об ошибке:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Плагин auth_socket проверяет, соответствует ли имя пользователя сокета (имя пользователя операционной системы) имени пользователя MySQL, указанному клиентской программой на сервере.

Этому плагину все равно, и ему не нужен пароль. Он просто проверяет, подключается ли пользователь через сокет UNIX, а затем сравнивает имя пользователя.

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

Например, если в операционной системе есть пользователь с именем ostechnix, он/она сможет войти в учетную запись 'ostechnix'@'localhost' в MySQL, если Аутентификация сокетов Unix — это определенный механизм аутентификации. Если имя пользователя операционной системы отличается от имени пользователя MySQL, плагин auth_socket просто отклоняет соединение.

Плагин auth_socket повышает безопасность, но также усложняет ситуацию, когда мы используем внешние программы, такие как phpMyAdmin, для доступа к серверу базы данных.

Кроме того, пользователи, прошедшие аутентификацию с помощью плагина auth_socket, могут подключаться только с локального хоста через файл сокета Unix. Им запрещено удаленно подключаться. Вот почему нам нужно изменить метод аутентификации для root-пользователя MySQL в Ubuntu.

1. Измените метод аутентификации для корневого пользователя MySQL в Ubuntu

MySQL предоставляет множество методов аутентификации и плагинов, реализующих эти методы. В этом руководстве мы обсуждаем только два плагина: caching_sha2_password и mysql_native_password, которые реализуют методы, называемые Caching. Подключаемая аутентификация SHA-2 и Встроенная подключаемая аутентификация соответственно.

Сначала мы увидим, как изменить метод аутентификации для пользователя root MySQL на caching_sha2_password.

1.1. Измените плагин аутентификации на caching_sha2_password.

Плагин caching_sha2_password выполняет аутентификацию с использованием хеширования пароля SHA-256. В MySQL 8.0 плагином аутентификации по умолчанию является caching_sha2_password, а не mysql_native_password. Он обеспечивает более безопасное шифрование паролей, более быструю аутентификацию и лучшую производительность.

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

sudo mysql

Поскольку MySQL 8 использует плагин auth_socket в Ubuntu, приведенная выше команда позволит вам войти на сервер MySQL как пользователь root. Введите свой пароль sudo для аутентификации.

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

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             |                                                                        | auth_socket           | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.01 sec)

Проверьте текущий метод аутентификации для пользователя root MySQL

Как видите, пользователь root MySQL использует плагин auth_socket для аутентификации. Давайте изменим плагин auth_socket на плагин caching_sha2_password, используя команду ALTER USER, как показано ниже.

Обратите внимание: если вы включили плагин VALIDATE PASSWORD при настройке пароля root-пользователя MySQL, вам необходимо ввести надежный пароль в соответствии с текущей политикой паролей. Надежный пароль должен состоять как минимум из 8 символов, включая прописную букву, строчную букву, цифру и специальный символ.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Замените Password123#@! в приведенной выше команде надежным и уникальным паролем по вашему выбору и запишите его, так как он понадобится нам позже.

Затем обновите изменения с помощью команды:

mysql> FLUSH PRIVILEGES;

Теперь проверьте, изменен ли текущий плагин аутентификации или нет, с помощью команды:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             | $A$005$z9Lq/%(r l
 +DDI9wJbql8DWZNRoet2BSwUrIgjq.l7FxRSyMb/OWk4 | caching_sha2_password | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.00 sec)

Измените плагин аутентификации на caching_sha2_password для пользователя root MySQL.

В качестве метода аутентификации для пользователя root MySQL установлено значение Caching Pluggable Authentication. С этого момента пользователь root MySQL может аутентифицироваться с помощью пароля.

Выход из командной строки MySQL:

mysql> exit

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

mysql -u root -p

Введите пароль пользователя root MySQL:

 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 11
 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

 Copyright (c) 2000, 2021, Oracle and/or its affiliates.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

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

 mysql> 

Войдите на сервер MySQL с пользователем root и паролем.

Несмотря на то, что плагин caching_sha2_password обеспечивает улучшенное безопасное шифрование и лучшую производительность, он имеет некоторые проблемы совместимости с существующими установками MySQL и вызывает проблемы с некоторыми версиями PHP. Подробную информацию можно найти по этой ссылке.

Если вы столкнулись с какими-либо проблемами совместимости или если клиент или соединитель не поддерживает плагин аутентификации caching_sha2_password, вернитесь к собственному методу аутентификации, то есть mysql_native_password, как описано в следующем разделе.

1.2. Измените плагин аутентификации на mysql_native_password.

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

mysql_native_password был методом аутентификации по умолчанию в старых версиях MySQL.

Чтобы перейти на плагин mysql_native_password, войдите в MySQL как пользователь root:

mysql -u root -p

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

sudo mysql

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

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password123#@!';

Обновите изменения с помощью команды:

mysql> FLUSH PRIVILEGES;

Теперь проверьте, изменен ли метод аутентификации или нет, с помощью команды:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             | *B6032809F2C8CE37BDF05DEFE5BA30D6DC74DC68                              | mysql_native_password | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.00 sec)

Измените плагин аутентификации на mysql_native_password для пользователя root MySQL.

Сделанный! Мы изменили метод аутентификации для пользователя root MySQL на Native Pluggable Authentication.

Заключение

В этом руководстве мы рассмотрели, почему нам нужно изменить метод аутентификации для пользователя root MySQL в системах Ubuntu, работающих под управлением MySQL 5.7 и более новых версий. Мы также увидели, как изменить плагин auth_socket на плагин caching_sha2_password или mysql_native_password для root-пользователя MySQL в операционной системе Ubuntu.

Связанное чтение:

  • Как сбросить пароль root в MySQL 8 в Ubuntu Linux

Статьи по данной тематике