Logo MariaDB

Corregir ERROR 1698 (28000): Access denied for user ‘root’@’localhost’ en MariaDB (MySQL)

publicado en: MariaDB, MySQL, SGBD | 34
 
 

Introducción
Si tras instalar el servidor MariaDB (MySQL), e intentar acceder al servidor por consola o por phpMyAdmin con la cuenta de root, obtenemos el siguiente error:

$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Existen varias formas de corregir el error. En este artículo, mostraremos una de ellas.
 
Téngase en cuenta lo siguiente antes de modificar nada
Tanto unix_socket como mysql_native_password son plugins de autenticación que utiliza MariaDB (MySQL). Sería conveniente que antes de cambiar nada, leyeseis lo siguiente:

  • unix_socket: Plugin que permite al usuario utilizar las credenciales del sistema operativo cuando se conecta a MariaDB (MySQL) a través del archivo local de socket Unix. Este archivo de socket Unix está definido por la variable de sistema socket. Resumiendo, permite recuperar el UID del proceso conectado al socket y luego puede obtener el nombre de usuario asociado con ese UID del proceso, una vez que tenga el nombre de usuario, autenticará al usuario que se conecta a MariaDB (MySQL) que tiene el mismo nombre de usuario del sistema.

    Luego si utilizamos unix_socket, tendremos que acceder con un usuario del sistema que exista en MariaDB. Por ejemplo, para acceder como root en MariaDB tendrá que ser con la cuenta del sistema de root.
  • mysql_native_password: Implementa la autenticación nativa, es decir, autenticación basada en el método hash de contraseña. Según el sitio oficial MariaDB nos advierten de lo siguiente:

    «No se recomienda utilizar el complemento de autenticación mysql_native_password para nuevas instalaciones que requieran una alta seguridad de contraseña. Si alguien puede escuchar el protocolo de conexión y obtener una copia de la tabla mysql.user, entonces la persona que escucha podrá usar esta información para conectarse al servidor MariaDB. El complemento de autenticación ed25519 es un complemento de autenticación más moderno que proporciona autenticación de contraseña simple mediante un algoritmo más seguro».

 
SOLUCIÓN propuesta
Para conseguirlo, ejecutaremos los siguientes comandos y sentencias:

Tendremos que ejecutar el cliente de MariaDB (MySQL) como superusuario precedido del comando sudo:

$ sudo mysql -u root -p

Una vez que hemos accedido al servidor, seleccionamos la base de datos mysql:

MariaDB [(none)]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed

Listamos el contenido de los campos user y plugin:

MariaDB [mysql]> SELECT user, plugin FROM user;
+------------+-------------+
| user       | plugin      |
+------------+-------------+
| root       | unix_socket |
| phpmyadmin |             |
+------------+-------------+
2 rows in set (0.00 sec)

Actualizamos de unix_socket a mysql_native_password:

MariaDB [mysql]> UPDATE user SET plugin="mysql_native_password" WHERE user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Comprobamos los cambios listando de nuevo los campos user y plugin:

MariaDB [mysql]> SELECT user, plugin FROM user;
+------------+-----------------------+
| user       | plugin                |
+------------+-----------------------+
| root       | mysql_native_password |
| phpmyadmin |                       |
+------------+-----------------------+
2 rows in set (0.00 sec)

Forzamos al servidor a recargar los privilegios de los usuarios, logrando que los cambios surtan efecto tras la ejecución de la sentencia sin necesidad de reiniciar el servidor:

MariaDB [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Cerramos la conexión con el servidor y cerramos el cliente:

MariaDB [mysql]> exit;

Ahora, probamos sin sudo:

$ mysql -u root -p

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

34 comentarios

  1. luis diaz

    Excelente aporte…..
    Me paso que al instalar Mysql-server no me pido que configurar la contraseña de root y luego al querer iniciar mysql me daba el error.
    Muchas gracias por tu aporte. Ya solucione

  2. JBueno

    Fantástico. Después de buscar y probar varias cosas, ésta ha sido la que me ha funcionado, y además aclarado lo que estaba haciendo.
    Gracias.

  3. Juan Camilo

    Amigo en las nuevas versiones de mariaDB los campos a utilizar son user con minúsculas, en mayúsculas arroja el error diciendo que la tabla no existe, efectivamente esta se encuentra en minúsculas, no se mucho sobre MySQL pero pues en mi caso solucione el problema de no acceso a la tabla USER así.

  4. Carlos

    Genial artículo, tras varias semanas con este problema he podido solucionarlo.
    gracias,

  5. Daunier

    Excelente articulo, muy bien explicado y lo mas importante, solucione un problema de dos días en cinco minutos, a diferencia de otros sitios tratando el mismos error sin resultado alguno.
    Gracias.

  6. victor

    buenas. despues de que arreglara el error con tus lineas de codigo, seguí con la instalacion. cuando estaba instalando el phpmyadmin no le puse contraseña y ahora no me deja acceder. gracias de nuevo

    • J. Carlos

      Hola victor,

      ¿Ni siquiera como root?
      ¿o no llegas al login?
      ¿te indica algún error?
      Necesitamos más información

      Gracias por visitar ZeppelinuX

  7. alberto

    esta muy bueno, pero tengo un problema que no he podido solucionar al escribir » UPDATE user SET plugin=»mysql_native_password» WHERE user=»root»; » me da el siguiente error, si me pudieras ayudar.

    ERROR 1348 (HY000): Column ‘plugin’ is not updatable

    • J. Carlos

      Hola alberto,
      Asegúrate que estás como root y no como usuario normal.
      Como root debería permitirte hacer modificaciones en la tabla mysql.
      si te sigue fallando, copia el comando que estás utilizando para que lo pueda ver yo.
      Un saludo

  8. Hernan

    Luego de aplicar tu solucion, obtenia el siguiente error

    ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

    O sea, no funciona el password seteado cuando corri el script de configuracion de seguridad (mysql_secure_installation)

    Me toco iniciar entrar a mysql con el usuario root de linux:

    sudo mysql -u root

    dentro de la consola de mysql, seleccione la base de datos mysql:

    use mysql;

    y actualize el password para el usuario root:

    update user set authentication_string = PASSWORD(‘mi_password_nuevo’) where User=’root’;

    luego:

    flush privileges;

    Salir y reiniciar mysql.

    Luego ya pude iniciar normalmente con:

    mysql -u root -p

    Espero le sirva a alguien

  9. Carlos

    Hola J. Carlos.
    Muchas gracias. Efectivo, claro y conciso. Y solucionado perfectamente el problema que aparecía.
    Espero que no te importe que haya puesto un enlace a este artículo en mi modesto blog de aprendiz, mi particular «blog de notas», que así no pierdo esta referencia.
    Un cordial saludo.
    Carlos.

    • J. Carlos

      Hola Carlos,
      Me alegra que haya solucionado su problema y no me importa en absluto que enlace este artículo a su blog.

      Tenga usted un cordial saludo de mi parte.

  10. Dani

    GRANDE! llevaba un par de dias con este error, estoy haciendo un cursillo online de SQL y no habia manera de acceder mediante el workbench. Porque ocurre este error? se compromete de alguna forma la seguridad al arreglarlo de esta forma? (aparte de resetear la pass del root, claro)

    Gracias de antemano

    • J. Carlos

      Hola Dani,
      Lo único que te puedo decir es lo siguiente sobre los plugins de autenticación de MariaDB/MySQL:
      unix_socket: Permite al usuario utilizar las credenciales del sistema operativo cuando se conecta a MariaDB a través del archivo de socket Unix local. Este archivo de socket Unix está definido por la variable de sistema socket. Resumiendo, permite recuperar el UID del proceso conectado al socket y luego puede obtener el nombre de usuario asociado con ese UID del proceso, una vez que tenga el nombre de usuario, autenticará al usuario que se conecta a MariaDB/MySQL que tiene el mismo nombre de usuario del sistema.
      mysql_native_password: Implementa la autenticación nativa, es decir, autenticación basada en el método hash de contraseña. Según el sitio oficial MariaDB nos advierten de esto:
      «No se recomienda utilizar el complemento de autenticación mysql_native_password para nuevas instalaciones que requieran una alta seguridad de contraseña. Si alguien puede escuchar el protocolo de conexión y obtener una copia de la tabla mysql.user, entonces la persona que escucha podrá usar esta información para conectarse al servidor MariaDB. El complemento de autenticación ed25519 es un complemento de autenticación más moderno que proporciona autenticación de contraseña simple mediante un algoritmo más seguro.

      Luego si utilizas unix_socket, tendrás que acceder siendo root (por ejemplo con sudo).

      Espero que te haya servido de algo
      Un saludo y gracias por visitar ZeppelinuX
      PD: Voy a modificar el artículo para que tengáis esto en cuenta.

  11. Rodolfo Echcverry Urbano

    Hola. Saludos a toda la comunidad.
    La situación que me ocurre es que al intentar iniciar MySQL desde la terminal de Linux Mint y una vez me pide la contraseña y presiono Enter me sale este aviso:
    ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

    Intenté con la solución que aquí presentan, pero persiste el problema

    • J. Carlos

      Hola rodolfo,

      Prueba lo siguiente:

      1. Reinstalar el gestor de base de datos:
        $ sudo apt-get -y install mariadb-server
      2. Después ejecutamos el script que se utiliza para mejorar la seguridad del servidor y volvemos a seguir las instrucciones:
        $ sudo mysql_secure_installation
      3. Una vez terminado volver a ingresar en la base de datos con el siguiente comando:
        $ mysql -u root -p

      Espero que con estos pasos lo hayas podido solucionar. Si no funciona házmelo saber.

      Un saludo.

  12. Yonathan B

    Checking MariaDB version 10.11.4 .. OK
    ERROR 1698 (28000): Access denied for user ‘root’@’localhost’
    ERROR: Unable to load SQL-Dump into database table.
    root@jonathanserver:/tmp/ispconfig3_install/install#

    • J. Carlos

      Hola Yonathan B,
      En primer lugar perdón por la tardanza, pero ya he vuelto.
      ¿Podrías ser más explicito?

      Un saludo y gracias por visitar ZeppelinuX.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.