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

382

Estoy configurando un nuevo servidor y sigo teniendo este problema.

Cuando intento iniciar sesión en la base de datos MySQL con el usuario root, aparece el error:

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

No importa si me conecto a través del terminal (SSH), a través de PHPMyAdmin o un cliente MySQL, por ejemplo, Navicat. Todos fallan.

Miré en la tabla mysql.user y obtuve lo siguiente:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Como puede ver, la raíz debe tener acceso.

El servidor es bastante simple, ya que he tratado de solucionar esto por un tiempo ...

Está ejecutando Ubuntu 16.04.1 LTS con Apache, MySQL y PHP, para que pueda alojar sitios web, e iRedMail 0.9.5-1, para que pueda alojar correo.

Iniciar sesión en la base de datos MySQL funciona bien antes de instalar iRedMail. También intenté, simplemente instalando iRedMail, pero luego root, tampoco funciona ...

Si alguien pudiera decirme cómo soluciono mi problema de inicio de sesión de MySQL o cómo instalo iRedMail, además de una instalación existente de MySQL. Y sí, probé los Consejos de instalación y no puedo encontrar esas variables en los archivos de configuración.

Folkmann
fuente
Seguí este enlace y la primera opción funcionó para mí: askubuntu.com/questions/763336/…
Mikael Arhelger
3
sudo mysql_secure_installationes la forma más fácil de arreglar eso
Sergey Ponomarev

Respuestas:

1121

Algunos sistemas como Ubuntu, mysql está usando por defecto el complemento UNIX auth_socket .

Básicamente significa que: db_users usándolo, será "auth" por las credenciales de usuario del sistema. Puede ver si su rootusuario está configurado de esta manera haciendo lo siguiente:

$ sudo mysql -u root # I had to use "sudo" since is 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, el rootusuario está usando el auth_socketcomplemento

Hay 2 formas de resolver esto:

  1. Puede configurar el usuario root para usar el mysql_native_passwordcomplemento
  2. Puedes crear un nuevo db_user contigo system_user(recomendado)

Opción 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

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

$ service mysql restart

Opcion 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 '';
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;

$ service mysql restart

Recuerde que si usa la opción # 2, tendrá que conectarse a mysql como su nombre de usuario del sistema ( mysql -u YOUR_SYSTEM_USER)

Nota: En algunos sistemas (por ejemplo, Debian 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';

Actualización: del comentario de @ andy parece que mysql 8.xx actualizó / reemplazó elauth_socket porque caching_sha2_passwordno tengo una configuración del sistema con mysql 8.xx 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 mensaje. No es necesario el paso "UPDATE user SET plugin". Para ver la actualización predeterminada del complemento de autenticación 8.0.4, consulte https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

zetacu
fuente
55
La opción 1 funcionó para mí. Pero entonces también necesitaba correr sudo gedit /etc/phpmyadmin/config.inc.php. Luego hice una búsqueda AllowNoPasswordy descomenté ambas líneas que lo contenían. Luego pude iniciar sesión como root sin contraseña.
Joe
77
La opción 2 funciona. ¡Creo que siempre es una buena práctica crear un nuevo usuario y usar dejar root para estar allí!
PasinduJay
2
el IDENTIFIED BY ''bit probablemente debería serIDENTIFIED BY 'YOUR_PASSWD'
YakovL
44
¡Finalmente, una respuesta que realmente funciona ! Hay un millón de respuestas por ahí diciendo do mysqld_safe --skip-grant-tables, etc., y no ha estado funcionando.
Stewart
44
Ok, ¿cómo hacer esto si sudo mysql -u root -pno me deja entrar?
Hrvoje T
173

Chequea aquí:

La NUEVA versión de MYSQL lo hace de esta manera.

En el nuevo my-sql, si la contraseña se deja vacía durante la instalación, se basa en el auth_socketcomplemento.

La forma correcta es iniciar sesión en my-sql con sudoprivilegio.

$ sudo mysql -u root -p

Y luego actualizando la contraseña usando:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Una vez hecho esto, stop and startel servidor mysql.

$  sudo service mysql stop
$  sudo service mysql start

Para obtener detalles completos, puede consultar este enlace .

Comenta para cualquier duda.

Nandesh
fuente
44
Esto funcionó para mí usando Ubuntu 18. Muchas gracias.
Peter Drinnan
10
También funcionó en ubuntu 18.04
sgtkuncoro
2
Exactamente lo que estaba buscando. Gracias :) Trabajó en Ubuntu 18
Manthan_Admane
2
esto funcionó a las mil maravillas, lubuntu 19.04
Kvvaradha
3
Esto funciona bien El enlace es útil.
kjohri
9

Estaba teniendo este problema en una máquina virtual Debian 8 con la que estaba interactuando a través de Putty en mi escritorio de Windows 10.

Intenté varias sugerencias aquí, pero nada funcionó y estoy ejecutando MariaDB en el host de Debian. Al final descubrí que no podía iniciar el servidor db en modo seguro, pero no era necesario y los siguientes comandos realmente funcionaron para mí, es decir, permitir que un usuario de MySql recién creado inicie sesión en el servidor MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Si lo anterior no funciona para usted, siga los pasos descritos en la publicación anterior de zetacu ( zetacu ) y luego siga mis pasos.

Ahora debería poder usar un cliente de terminal remoto e iniciar sesión de forma segura en mysql con el comando:

mysql -u your_user_name -p

* escriba la contraseña cuando se le solicite

Tahir Khalid
fuente
Así de simple Bueno, sólo el primer comando no autorizado a ejecutar la segunda, así que voy a ajusto edición - por favor ver si estoy bien ...
kokbira
7

Sugeriría eliminar la conexión Mysql -

ACTUALIZACIÓN: esto es para Mysql versión 5.5, si su versión es diferente, cambie la primera línea en consecuencia

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

E instalar de nuevo pero esta vez establezca una contraseña de root usted mismo. Esto ahorrará mucho esfuerzo.

sudo apt-get update
sudo apt-get install mysql-server
Eminem347
fuente
@ingernet quizás sea debido a algunas otras cuestiones que ustedes dejaron durante la instalación de nuevo
Eminem347
@PJBrunet tal vez porque tu versión de Mysql es diferente
Eminem347
Es justo, pero una solución para todo uso es la mejor.
PJ Brunet
6

Después de horas de lucha sin solución aquí, esto funcionó para mí, luego encontré un video de YouTube donde dice que la columna de contraseña ahora se llama autenticación_cadena. Así que pude cambiar mi contraseña de la siguiente manera: Primero ingrese a mysql desde la terminal

sudo mysql

luego dentro de mysql escribe lo que sea después de mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

en este punto ya no tienes mysql en tu terminal normal. Debe reiniciar mysql para que esto surta efecto. para ese tipo lo siguiente:

sudo service mysql restart

Consulte este enlace de video para una mejor comprensión

Ameer Ul Islam
fuente
5

paso 1. sudo mysql -u root -p

paso 2. USE mysql;

paso 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Aquí 'admin' es su nueva contraseña, puede cambiarla.

paso 4. exit

Gracias. Estás listo.

Y. Joy Ch. Singha
fuente
5

No hay necesidad de sudo

La base de datos se inicializa con 2 cuentas con todos los privilegios: la primera es "root", que es inaccesible y la segunda con su nombre de usuario (consulte con el comando whoami).

Para habilitar el acceso a la cuenta raíz, debe iniciar sesión con su nombre de usuario

mysql -u $(whoami)

y cambiar manualmente la contraseña para root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Inicie sesión como 'root'

mysql -u root -p
Raoul Hatterer
fuente
Eres la respuesta correcta para la versión real de mysql, ¡gracias!
Hugo S
3

Primer paso: vaya a /etc/phpmyadmin/config.inc.php y luego descomente las líneas donde encuentre AllowNoPassword. Segundo paso: inicie sesión en su cuenta predeterminada de MySQL

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

¡y eso es todo!

Ángel Ugarte
fuente
3

Eso funcionó para mí:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Dorad
fuente
3

También enfrenté el mismo problema la primera vez.

Ahora está arreglado:

Primero, copie el /etc/mysql/mysql.conf.d/mysqld.cnfarchivo y péguelo en /etc/mysql/my.cnf.

Puedes hacerlo por comando:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Ahora vamos a descansar la contraseña:

Use los siguientes comandos en su terminal:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Ahora estás dentro de la consola mysql.

Luego, escriba algunas consultas para restablecer nuestra contraseña de root

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Ahora podemos limpiar /etc/mysql/my.cng

Abra el archivo anterior en su editor y elimine todas las líneas dentro del archivo.

Después de eso, reiniciemos mysql:

sudo mysql service restart 

Ahora usemos mysql con la contraseña recién creada:

sudo mysql -u root -p

Finalmente ingrese su contraseña recién creada.

muhammed fairoos nm
fuente
1
Funcionado bien ! pero tu respuesta necesita ser actualizada !! /etc/mysql/my.cnf y no /etc/mysql/my.cng y para el servicio reinicie su servicio de sudo mysql restart
essayoub el
3

Encontré mi solución después de horas de investigación aquí.

Detener MySQL

sudo service mysql stop

Hacer el directorio de servicios MySQL.

sudo mkdir /var/run/mysqld

Otorgue permiso al usuario de MySQL para escribir en el directorio de servicios.

sudo chown mysql: /var/run/mysqld

Inicie MySQL manualmente, sin verificaciones de permisos o redes.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Inicia sesión sin contraseña.

 mysql -uroot mysql

Actualiza contraseña

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Apaga MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Inicie el servicio MySQL normalmente.

sudo service mysql start
Sanjun Dev
fuente
¡Esto me dio un mensaje mysql cuando NADA MÁS lo haría! ¡Gracias!
UserX
2

Desea acceder a MySQL con el usuario root, pero no proporciona la contraseña correcta de root.

Si necesita establecer una nueva contraseña para root , el sitio de MySQL tiene una excelente documentación sobre cómo hacerlo: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

No mostraré el proceso aquí porque la documentación de MySql en el enlace anterior es clara y concisa .

Cristian Gonçalves
fuente
Gracias por la respuesta, pero no pude hacer que funcionara, así que elegí instalar iRedMail con una base de datos pgSQL.
Folkmann
Roger Folkman! Es bueno saber que resolvió su problema de cualquier manera.
Cristian Gonçalves
Los enlaces se rompen. mysql.com ha tenido muchos enlaces rotos a lo largo de los años. Debe copiar y pegar la información relevante aquí, lo cual está bien siempre que atribuya la fuente.
Goose
1

os: Ubuntu18.04

mysql: 5.7

  1. agregue el skip-grant-tablesal final del archivo de mysqld.cnf

  2. cp el my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. restablecer la contraseña
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 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, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. eliminar el skip-grant-tablesde my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. abre el mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. verifique la política de contraseña
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. cambiar la configuración de la validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

Tenga en cuenta que debe saber que error causado por qué? validate_password_policy?

debe decidir restablecer su contraseña para completar la política o cambiarla.

iamcxl
fuente
0

Esto ha sucedido a mí también. El problema es con el repositorio mysql que ya viene con la distribución de Linux. Entonces, cuando simplemente lo haces: $ sudo apt install mysql-server instala mysql desde su repositorio predeterminado, lo que da este problema. Entonces, para superar eso, debes desinstalar el mysql instalado $ sudo apt remove mysql* --purge --auto-remove

Luego descargue mysql repo desde el sitio web oficial de mysql MySQL APT Repo Siga su documentación sobre cómo agregar repo e instalarlo. Esto no da problema. Además, como respondió @zetacu, puede verificar que la raíz de mysql ahora realmente use el complemento mysql_native_password

sudip
fuente
0

en mi caso,

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

Estoy seguro de que mi contraseña era correcta; de lo contrario, el código de error sería ERROR 1045 (28000): Access denied for user

entonces vuelvo a iniciar sesión usando sudo,

dev@Dev-007:~$ sudo mysql -u root -p

Esta vez funcionó para mí. ver los documentos

y luego cambia la contraseña de root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

luego reinicie el servidor usando sudo /etc/init.d/mysql restart

Mohideen bin Mohammed
fuente