Alterar método de autenticação para usuário root MySQL no Ubuntu
Este guia explica por que e como alterar o método de autenticação do usuário root do MySQL para o método Caching SHA-2 Pluggable Authentication ou Native Pluggable Authentication no Ubuntu.
Introdução
Mesmo se você tiver uma senha definida para o usuário root do MySQL, você ainda não poderá se autenticar no servidor de banco de dados como usuário root
com uma senha. Porque o usuário root do MySQL está configurado para autenticar usando o plugin auth_socket
por padrão em vez da senha em sistemas Ubuntu executando MySQL 5.7 e versões mais recentes. Portanto, você não pode acessar o servidor MySQL com usuário root e sua senha.
Mesmo se você tentar autenticar como usuário root usando o comando:
mysql -u root -p
Você receberá a seguinte mensagem de erro:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
O plugin auth_socket
verifica se o nome de usuário do soquete (o nome de usuário do sistema operacional) corresponde ao nome de usuário MySQL especificado pelo programa cliente para o servidor.
Este plugin não liga e não precisa de senha. Ele apenas verifica se o usuário está se conectando usando um soquete UNIX e compara o nome de usuário.
Se o plugin descobrir que o nome de usuário do sistema operacional e o nome de usuário do MySQL são iguais, ele permitirá a conexão sem autenticação adicional.
Por exemplo, se houver um usuário chamado ostechnix
no sistema operacional, ele/ela poderá fazer login na conta 'ostechnix'@'localhost'
dentro do MySQL se A autenticação de soquete Unix é o mecanismo de autenticação definido. Se o nome de usuário do sistema operacional for diferente do nome de usuário do MySQL, o plugin auth_socket
simplesmente recusa a conexão.
O plugin auth_socket
melhora a segurança, mas também complica as coisas quando usamos programas externos como phpMyAdmin para acessar o servidor de banco de dados.
Além disso, os usuários autenticados pelo plugin auth_socket
só podem se conectar do host local através do arquivo de soquete Unix. Eles estão impedidos de se conectar remotamente. É por isso que precisamos alterar o método de autenticação do usuário root do MySQL no Ubuntu.
1. Altere o método de autenticação para usuário root MySQL no Ubuntu
O MySQL fornece muitos métodos de autenticação e plug-ins que implementam esses métodos. Neste guia, discutiremos apenas dois plug-ins chamados caching_sha2_password
e mysql_native_password
que implementam os métodos chamados Caching Autenticação plugável SHA-2 e Autenticação plugável nativa respectivamente.
Primeiro, veremos como alterar o método de autenticação do usuário root do MySQL para caching_sha2_password
.
1.1. Altere o plugin de autenticação para caching_sha2_password
O plugin caching_sha2_password
realiza autenticação usando hash de senha SHA-256. No MySQL 8.0, caching_sha2_password
é o plugin de autenticação padrão em vez de mysql_native_password
. Ele fornece criptografia de senha mais segura, autenticação mais rápida e melhor desempenho.
Para alterar o plugin de autenticação, faça login no servidor MySQL usando o comando:
sudo mysql
Como o MySQL 8 usa o plugin auth_socket
no Ubuntu, o comando acima permitirá que você faça login no servidor MySQL como usuário root
. Digite sua senha sudo
para autenticar.
A seguir, encontre o método de autenticação atual para todas as contas de usuário MySQL executando o seguinte comando no prompt do MySQL:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Exemplo de resultado:
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)
Verifique o método de autenticação atual para o usuário root do mysql
Como você pode ver, o usuário root do MySQL usa o plugin auth_socket
para autenticação. Vamos alterar o plugin auth_socket
para o plugin caching_sha2_password
usando o comando ALTER USER
como abaixo.
Observe que se você ativou o plugin VALIDATE PASSWORD
ao definir a senha do usuário root do MySQL, você deve inserir uma senha forte com base na política de senha atual. Uma senha forte deve consistir em pelo menos 8 caracteres, incluindo uma letra maiúscula, uma letra minúscula, um número e um caractere especial.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';
Substitua Password123#@!
no comando acima por uma senha forte e exclusiva de sua escolha e anote-a, pois precisaremos dela mais tarde.
A seguir, atualize as alterações usando o comando:
mysql> FLUSH PRIVILEGES;
Agora verifique se o plugin de autenticação atual foi alterado ou não usando o comando:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Exemplo de resultado:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| 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)
Altere o plugin de autenticação para caching_sha2_password para usuário root do MySQL
O método de autenticação para o usuário root do MySQL foi definido como Caching SHA-2 Pluggable Authentication. A partir de agora, o usuário root do MySQL pode se autenticar usando uma senha.
Saia do prompt do mysql:
mysql> exit
Para verificar se o usuário root do MySQL pode fazer login com uma senha, digite o seguinte comando:
mysql -u root -p
Digite a senha do usuário root do 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>
Faça login no servidor MySQL com usuário root e senha
Embora o plugin caching_sha2_password
forneça criptografia segura aprimorada e melhor desempenho, ele tem alguns problemas de compatibilidade com instalações existentes do MySQL e causa problemas com algumas versões do PHP. Para obter detalhes, consulte este link.
Se você encontrar algum problema de compatibilidade ou se o cliente ou conector não for compatível com o plug-in de autenticação caching_sha2_password
, volte para o método de autenticação nativo, ou seja, mysql_native_password
conforme descrito na seção a seguir.
1.2. Altere o plugin de autenticação para mysql_native_password
MySQL inclui um plugin mysql_native_password
que implementa método de autenticação conectável nativo. Ele fornece autenticação baseada no método de hash de senha.
O mysql_native_password
era o método de autenticação padrão nas versões mais antigas do MySQL.
Para mudar para o plugin mysql_native_password
, faça login no MySQL como usuário root
:
mysql -u root -p
Se você estiver usando o plugin auth_socket
, você deve inserir o seguinte comando para fazer login no servidor MySQL como usuário root
:
sudo mysql
Para definir o plugin mysql_native_password
como autenticação padrão para o usuário root do MySQL, execute o seguinte comando no prompt do MySQL.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password123#@!';
Atualize as alterações usando o comando:
mysql> FLUSH PRIVILEGES;
Agora verifique se o método de autenticação foi alterado ou não usando o comando:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Exemplo de resultado:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| 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)
Altere o plugin de autenticação para mysql_native_password para usuário root do MySQL
Feito! Alteramos o método de autenticação do usuário root do MySQL para autenticação plugável nativa.
Conclusão
Neste guia, vimos por que precisamos alterar o método de autenticação para usuário root do MySQL em sistemas Ubuntu executando MySQL 5.7 e versões mais recentes. Também vimos como alterar o plugin auth_socket
para caching_sha2_password
ou mysql_native_password
para o usuário root do MySQL no sistema operacional Ubuntu.
Leitura relacionada:
- Como redefinir a senha root no MySQL 8 no Ubuntu Linux