mysql (mariadb) ERROR 1698 (28000): acceso denegado para el usuario 'root' @ 'localhost'


23

Estoy trabajando en Xubuntu 15.04. Ya instalé el Servidor MariaDB en varios sistemas y siempre me pidieron una contraseña de root durante la instalación. Esta vez, sin embargo, no recuerdo que me pidieran la contraseña. Cuando intento iniciar sesión sin una contraseña (o una contraseña en blanco), aparece el Access denied for user 'root'@'localhost'error. Intenté desinstalar el paquete por completo

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Cuando reinstalé, aún no me pidieron la contraseña de root.

Probé el mysqld --skip-grant-tablesenfoque de mysql sobre cómo corregir el acceso denegado para el usuario 'root' @ 'localhost' . Puedo modificar la contraseña para el usuario root en la base de datos mysql, al menos el valor hash cambia, pero todavía no puedo iniciar sesión con la nueva contraseña después de reiniciar el servidor mysql. Todavía recibo el mismo error.

El usuario debian-sys-maint no existe. Entonces, no puedo usarlo para arreglar nada.

¿Alguna idea de qué más podría probar?


Un hilo útil con la misma pregunta sobre StackOverflow: stackoverflow.com/questions/39281594/…
Kevin - Restablece a Monica el

Respuestas:


36

Necesita restablecer la contraseña. entonces para eso

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

99
La "magia" no obvia de este enfoque es que el usuario del sistema operativo raíz puede iniciar sesión en la base de datos sin tener que especificar una contraseña porque plugin: auth_socketestá habilitada de forma predeterminada. En otras palabras, no hay necesidad de usar --skip-grant-tablescomo hubiera sido necesario en versiones anteriores de MySQL. (Además, técnicamente, esta medida no es "restablecer la contraseña"; está desactivando un complemento).
Ben Johnson

1
+1, ¿Puedes explicar por qué?
A1Gard

44
Este enfoque causará problemas más adelante. Si deshabilita el complemento, el trabajo cron diario se interrumpirá ya que se supone que puede iniciar sesión con ese complemento. Vea mi respuesta para más detalles.
colan

11

La idea con la nueva configuración es que no debería usar contraseñas en absoluto. Vea UNIX_SOCKET Authentication Plugin para más detalles.

Lo que es especialmente relevante es el contenido de /usr/share/doc/mariadb-server-10.0/README.Debian.gz en Ubuntu 16.04:

En las nuevas instalaciones, no se establece una contraseña de root y ya no se crea ningún usuario debian-sys-maint. En cambio, la cuenta raíz de MariaDB está configurada para autenticarse utilizando el socket de Unix, por ejemplo, cualquier invocación de mysqld por root o vía sudo permitirá al usuario ver la solicitud de mysqld.

Es posible que nunca elimine el usuario "root" de mysql. Aunque no tiene una contraseña establecida, el complemento unix_auth garantiza que solo pueda ejecutarse localmente como usuario root.

Las credenciales en /etc/mysql/debian.cnf especifican el usuario que utilizan los scripts de inicio para detener el servidor y realizar la rotación de registros. Esto solía ser el usuario debian-sys-maint que ya no se usa como root puede ejecutarse directamente.

Entonces, si deshabilita ese complemento para root y establece una contraseña, el trabajo cron diario se interrumpirá ya que se supone que iniciará sesión como root sin una contraseña, pero con el complemento.

Más tarde dice:

Los scripts deben ejecutarse como un usuario que tiene las concesiones requeridas y debe identificarse a través de unix_socket.

Parece que las aplicaciones ya no deberían usar contraseñas.


1
Acabo de encontrar el mismo problema que usted describe: la "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."implicación no obvia de que el complemento de autenticación UNIX_SOCKET está habilitado (que ahora es el predeterminado) es la capacidad de autenticarse ya que el usuario de la base de datos raíz con una contraseña está deshabilitado. En ninguna parte de mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin se menciona esta limitación considerable. En consecuencia, es imposible iniciar sesión como root, por ejemplo, a través de SSH.
Ben Johnson

2

Resolví el problema siguiendo la respuesta de esta publicación:

No se puede restablecer la contraseña de root de MySQL (MariaDB)

Uno tiene que cambiar el campo del complemento de mysql.user para todas las raíces a una cadena en blanco.


Este problema se describe aquí: percona.com/blog/2016/03/16/…
antonu17

3
Este enfoque causará problemas más adelante. Si deshabilita el complemento, el trabajo cron diario se interrumpirá ya que se supone que puede iniciar sesión con ese complemento. Vea mi respuesta para más detalles.
colan

1

Lo hice ejecutando este comando, justo después de la instalación:

$ sudo mysql_secure_installation

En el primer paso, la contraseña está en blanco, así que solo presione Entrar


1
No está en blanco si ya está configurado, que es mi contraseña olvidada ... así que todavía no puedo iniciar sesión
Dave Everitt

0

Tuve el mismo problema en un raapberry pi con estiramiento. Mi solución fue crear un nuevo usuario con todos los privilegios haciendo lo siguiente:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Ahora puedo iniciar sesión y nosotros el usuario "admin" como superusuario.

Espero que esto ayude a alguien.


0

Solo use sudo mysql -u root- eso es todo


Detalles: las versiones más recientes se autentican en mysql mediante la autenticación del sistema. Entonces, si puede sudo al sistema operativo, se supone que también es db root. Puede confirmar esto emitiendo sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Deberías ver algo como esto (tal vez con auth_socketotras distribuciones)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

He iniciado sesión como root, pero para mí este comando todavía quiere la contraseña de root de MariaDB ... que he olvidado :-(
Dave Everitt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.