sql >> Base de Datos >  >> RDS >> Mysql

ERROR 1698 (28000):Acceso denegado para el usuario 'root'@'localhost'

Algunos sistemas como Ubuntu, MySQL utilizan Complemento auth_socket de UNIX por defecto.

Básicamente significa que:los usuarios de db_usuarios que lo usen serán "autenticados" por las credenciales de usuario del sistema. Puedes ver si tu root el usuario se configura así haciendo lo siguiente:

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 puede ver en la consulta, la root el usuario está usando el auth_socket complemento.

Hay dos formas de resolver esto:

  1. Puede establecer la raíz usuario para usar el mysql_native_password complemento
  2. Puedes crear un nuevo db_user contigo system_user (recomendado)

Opción 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

Opción 2: (reemplace YOUR_SYSTEM_USER con el nombre de usuario que tiene)

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

Recuerda que si usas la opción #2 tendrás que conectarte a MySQL como tu nombre de usuario del sistema (mysql -u YOUR_SYSTEM_USER ).

Nota: En algunos sistemas (por ejemplo, Debian 9 (Stretch)) el complemento 'auth_socket' se llama 'unix_socket' , por lo que el comando SQL correspondiente debería ser:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Según el comentario de @andy, parece que MySQL 8.x.x actualizó/reemplazó el auth_socket para caching_sha2_password . No tengo una configuración de sistema con MySQL 8.x.x para probar esto. Sin embargo, los pasos anteriores deberían ayudarlo a comprender el problema. Aquí está la respuesta:

Un cambio a partir de MySQL 8.0.4 es que el nuevo complemento de autenticación predeterminado es 'caching_sha2_password'. El nuevo 'YOUR_SYSTEM_USER' tendrá este complemento de autenticación y ahora puede iniciar sesión desde el shell Bash con "mysql -u YOUR_SYSTEM_USER -p" y proporcionar la contraseña para este usuario en el aviso. No es necesario el paso "ACTUALIZAR el complemento SET de usuario".

Para la actualización del complemento de autenticación predeterminado 8.0.4, consulte https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/