Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ERRO 1698 (28000):Acesso negado para usuário 'root'@'localhost'


Alguns sistemas como Ubuntu, MySQL está usando o Plugin auth_socket do UNIX por padrão.

Basicamente significa que:db_users usando-o, serão "autenticados" pelas credenciais do usuário do sistema. Você pode ver se o seu root user é configurado assim fazendo o seguinte:
sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Como você pode ver na consulta, o root o usuário está usando o auth_socket plugar.

Existem duas maneiras de resolver isso:
  1. Você pode definir a raiz usuário use a mysql_native_password plug-in
  2. Você pode criar um novo db_user com você system_user (recomendado)

Opção 1:
sudo mysql -u root # I had to use "sudo" since it was new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

Opção 2: (substitua YOUR_SYSTEM_USER pelo nome de usuário que você possui)
sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

Lembre-se que se você usar a opção #2 você terá que se conectar ao MySQL como seu nome de usuário do sistema (mysql -u YOUR_SYSTEM_USER ).

Observação: Em alguns sistemas (por exemplo, Debian 9 (Stretch)) o plugin 'auth_socket' é chamado 'unix_socket' , então o comando SQL correspondente deve ser:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Do comentário de @andy parece que o MySQL 8.x.x atualizou/substituiu o auth_socket para caching_sha2_password . Eu não tenho uma configuração de sistema com MySQL 8.x.x para testar isso. No entanto, as etapas acima devem ajudá-lo a entender o problema. Aqui está a resposta:

Uma mudança a partir do MySQL 8.0.4 é que o novo plugin de autenticação padrão é 'caching_sha2_password'. O novo 'YOUR_SYSTEM_USER' terá este plugin de autenticação e você pode efetuar login a partir do shell Bash agora com "mysql -u YOUR_SYSTEM_USER -p" e fornecer a senha para este usuário no prompt. Não há necessidade da etapa "UPDATE user SET plugin".

Para a atualização do plug-in de autenticação padrão 8.0.4, consulte https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/