Изменить метод аутентификации для корневого пользователя 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