Pesquisa de site

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

Artigos relacionados