Eu estava tentando definir a senha para root
. Quando eu corro:
mysql> SELECT * from mysql.user where User="root";
Isto mostra:
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | | N | 2018-06-13 15:11:59 | NULL | N |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
Este Documento diz que,
O plugin de autenticação nativa mysql_native_password é compatível com versões anteriores. Clientes mais antigos que não suportam plug-ins de autenticação usam o protocolo de autenticação nativo, para que possam se conectar a servidores que suportam autenticação conectável.
Mas tecnicamente não estou conseguindo muito. Tem que fazer alguma coisa com root
a senha do usuário?
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
e
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Faz alguma diferença?
Por muito tempo, o MySQL tem suportado diferentes plugins de autenticação , basicamente pedaços de código programáveis para demonstrar que uma conta mysql é de propriedade de quem afirma isso.
A maneira original de fazer isso é configurar uma senha, fazer o hash de uma maneira específica e armazená-la na tabela mysql.user. No entanto, não é a única maneira de autenticar, por exemplo:
caching_sha2_password
), que em teoria é mais seguro (não estou dizendo que é ou não é, mas certamente o padrão "nativo" era muito ruim), mas pode exigem atualizações de drivers e aplicativos clientes, para que você sempre possa reverter para o mais antigo por motivos de compatibilidade.No mundo "Enterprise", muitas vezes há necessidades especiais de métodos de autenticação muito especiais, além de um usuário e senha.
Basicamente, mysql_native_password é o método tradicional de autenticação - não é muito seguro (usa apenas um hash da senha), mas é compatível com drivers mais antigos . Se você for iniciar um novo serviço mysql, provavelmente desejará usar o novo plugin desde o início (e TLS). Se você tiver necessidades especiais, pode usar outro método - você pode até programar um se tiver certas necessidades especiais).
Você pode escolher um método diferente para cada usuário individual - por exemplo, seus aplicativos normais podem usar mysql_native_password ou o novo sha2, mas você pode garantir que suas contas de administrador usem um token de autenticação de 2 fatores e unix_socket para um usuário de monitoramento coletando estatísticas no servidor mysql. Esses outros métodos de autenticação podem ou não usar o campo de senha na tabela mysql.user, como o nativo faz (eles podem armazenar a senha em outro lugar, ou podem nem mesmo ter um conceito de senha!).
e
São essencialmente os mesmos, mysql_native_password é normalmente o método de autenticação padrão. Com
WITH
você pode decidir qual método usar. Por exemplo, se você usarGRANT USAGE ON *.* TO root@localhost IDENTIFIED WITH socket_auth
, você está configurando esse usuário para usar a autenticação de soquete unix. MariaDB usa uma sintaxe ligeiramente diferente:VIA unix_socket
. A execução desses comandos resulta principalmente em uma atualização da tabela mysql.user.Nota
ALTER
/GRANT
funciona automaticamente no próximo login do usuário, enquantoUPDATE
o comando direto da tabela mysql.user pode exigir umFLUSH PRIVILEGES
, e tem alguns problemas em certos cenários (Galera, etc.).