En resumen, en MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
donde reemplaza NEWPASSWORD con la contraseña que desea, y todo lo demás textualmente.
El problema aquí es que cuando MariaDB o MySQL se instalan / actualizan (especialmente si en algún momento la raíz se configura sin contraseña), en la tabla Usuarios la contraseña está realmente vacía (o ignorada), y el inicio de sesión depende del usuario del sistema correspondiente a un usuario de MySQL. Puede probar esto de la siguiente manera cambiando a la raíz del sistema y luego escriba:
mysql -uroot -p
Luego ingrese sin contraseña o la contraseña incorrecta . Probablemente se le permitirá ingresar. (Incluso puede iniciar sesión desde la raíz de Unix simplemente # mysql
porque la contraseña es irrelevante y el usuario está definido).
¿Entonces que esta pasando? Bueno, si inicia sesión como root y hace lo siguiente:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
notarás auth_socket
(que puedes leer unix_socket
en MariaDB). Estos sockets ignoran las contraseñas y permiten que el usuario de Unix correspondiente ingrese sin una verificación de contraseña. Es por eso que puede iniciar sesión con root pero no con un usuario diferente.
Por lo tanto, la solución es actualizar a los usuarios para que no usen auth_socket/unix_socket
y establecer una contraseña correctamente.
En MariaDB (<10.2, vea los comentarios a continuación) que se encuentra en la versión 16 de Ubuntu a partir de 2017, esto debería ser suficiente. NEWPASSWORD es tu contraseña. mysql_native_password
escribes al pie de la letra.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Es posible que configurar el complemento para vaciar funcione. YMMV. No probé esto. Así que esta es una alternativa).
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
De otra manera:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Entonces
FLUSH PRIVILEGES;
Para el registro, la solución que implica eliminar al usuario y recrearlo con '%' me dejó totalmente bloqueado de la base de datos, y puede causar otros problemas a menos que obtenga la grant
declaración correcta, es más fácil simplemente actualizar la raíz que ya tiene.
En mi experiencia, el problema solo ocurre con el usuario root, ya que otros usuarios se agregarán manualmente y no formarán parte de una instalación / actualización inicial.