Acceso denegado para el usuario 'root' @ 'localhost' (usando contraseña: SÍ) - ¿Sin privilegios?


110

Recibo continuamente este error.

Estoy usando mySQL Workbench y lo que encuentro es que los privilegios de esquema de root son nulos. No hay ningún privilegio.

Tengo problemas en las plataformas para las que se usa mi servidor y esto ha sido un problema repentino.

root@127.0.0.1 aparentemente tiene mucho acceso, pero estoy conectado así, pero de todos modos solo se asigna a localhost: localhost no tiene privilegios.

He hecho algunas cosas como FLUSH HOSTS, FLUSH PRIVILEGESetc., pero no he tenido éxito ni en eso ni en Internet.

¿Cómo puedo recuperar el acceso de root? Encuentro esto frustrante porque cuando miro a mi alrededor, la gente espera que "tengas acceso", pero yo no tengo acceso, así que no puedo entrar en la línea de comandos ni nada y GRANTyo mismo nada.

Al ejecutar SHOW GRANTS FOR rootesto es lo que obtengo a cambio:

Código de error: 1141. No existe tal concesión definida para el usuario 'root' en el host '%'


Ejecute SHOW GRANTS FOR rootuna consulta, publique el resultado en su pregunta.
NobleUplift

¿Está intentando acceder a la base de datos desde el localhost o desde otro host usando MySQL Workbench?
Andy Jones

reinicie el servidor con --skip-grant-table e inicie sesión con cualquier usuario y proporcione todos los privilegios de root y reinicie el servidor nuevamente sin la opción anterior
vidyadhar

@AndyJones no, está en un servidor dedicado que estoy usando.
Chase

@vidyadhar Lo siento, ¿no estoy seguro de dónde haría eso?
Chase

Respuestas:


51

Use las instrucciones para restablecer la contraseña de root , pero en lugar de restablecer la contraseña de root, insertaremos forzosamente un registro en la tabla mysql.user

En el archivo init, use esto en su lugar

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
Lo siento Andy, pero cuando llego al paso 6 sigo teniendo problemas. Como usé un asistente de instalación, usaría "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Todo está donde se supone que debe estar y lo que tiene arriba lo puse en el archivo en consecuencia. También tengo el servicio detenido. Acabo de obtener este resultado: prntscr.com/1ilxau Y todo (complementos) apagado. Realmente confuso.
Chase

2
estás ejecutando esto como administrador?
Andy Jones

1
Ante mi estupidez sorpresa, no lo estaba. Después de eso, obtuve este prntscr.com/1imcnj : la primera vez que lo hice en sus propias líneas (de pegar), lo puse todo en una línea. Lamento que esto sea tan confuso para mí, no para el experto en SQL per se.
persecución

16
da: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'error. @AndyJones
Alper

1
Recibo: Columna desconocida 'Contraseña' en 'lista de campos'
sricheta ruj

128

Si tiene el mismo problema en MySql 5.7. +:

Access denied for user 'root'@'localhost'

es porque MySql 5.7 por defecto permite conectarse con socket, lo que significa que simplemente se conecta con sudo mysql. Si ejecuta sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

entonces lo verás:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Para permitir la conexión con root y contraseña, actualice los valores en la tabla con el comando:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Luego ejecute el comando select nuevamente y verá que ha cambiado:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Y eso es. Puede ejecutar este proceso después de ejecutar y completar el sudo mysql_secure_installationcomando.

Para mariadb, utilice

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

para establecer la contraseña. Más en https://mariadb.com/kb/en/set-password/


1
Realmente gracias mientras se establece la conexión en Linux
Mint

Actualizando desde auth_socketpara mysql_native_passwordsolucionar mi problema. ¡Gracias!
olore

1
Esto era absolutamente exasperante intentar averiguarlo y una enorme pérdida de tiempo. Ojalá preguntaran esto durante mysql_secure_installation. Muchas gracias por esta respuesta.
PatPeter


42

No le gustó mi privilegio de usuario, así que lo SUDO. (en bash << sudo establece usuario y contraseña) (esto proporciona el nombre de usuario de root y no establece la contraseña en nada) (En Mac)

sudo mysql -uroot -p

27

Prueba los siguientes comandos

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 

11
En MySQL 5.7, el campo de contraseña en el campo de la tabla mysql.user fue eliminado, ahora el nombre del campo es 'authentication_string'.
Rumid

para la versión más reciente de mysql, cambiaron el nombre de la columna de contraseña como authentication_string
Ramesh Maharjan

sudo mysqld_safeme consiguió esto /var/run/mysqld for UNIX socket file don't exists, luego después mkdir -p /var/run/mysqldy sudo chown -R mysql:mysql /var/run/mysqld/funcionó y comenzó el demonio.
kenzotenma

1
ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.so
Mostafa

19

para las personas que enfrentan el siguiente error en la versión de mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Abrir nueva terminal

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc está detenido

  3. sudo mysqld_safe --skip-grant-tables & esto omitirá todos los privilegios de nivel de concesión e iniciará mysql en modo seguro.A veces el proceso se atasca solo por

grep: error de escritura: tubería rota 180102 11:32:28 mysqld_safe Registro en '/var/log/mysql/error.log'.

Simplemente presione Ctrl + Z o Ctrl + C para interrumpir y salir del proceso

  1. mysql -u root

Bienvenido al monitor MySQL. Los comandos terminan con; o \ g. Su ID de conexión MySQL es 2 Versión del servidor: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle y / o sus filiales. Todos los derechos reservados.

Oracle es una marca registrada de Oracle Corporation y / o sus afiliadas. Otros nombres pueden ser marcas comerciales de sus respectivos propietarios.

Escriba 'ayuda'; o '\ h' para obtener ayuda. Escriba '\ c' para borrar la declaración de entrada actual.

  1. mysql> use mysql;

Lectura de la información de la tabla para completar los nombres de las tablas y las columnas Puede desactivar esta función para obtener un inicio más rápido con -A

Base de datos cambiada

  1. mysql> update user set authentication_string=password('password') where user='root'; Consulta OK, 4 filas afectadas, 1 advertencia (0.03 seg) Filas coincidentes: 4 Cambiado: 4 Advertencias: 1

  2. mysql> flush privileges; Consulta OK, 0 filas afectadas (0.00 seg)

  3. mysql> quit Adiós

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld del archivo pid /var/run/mysqld/mysqld.pid finalizó. * MySQL Community Server 5.7.8-rc se detiene arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc se inicia

  1. mysql -u root -p

    Introducir la contraseña:

    Bienvenido al monitor MySQL. Los comandos terminan con; o \ g. Su ID de conexión MySQL es 2 Versión del servidor: 5.7.8-rc MySQL Community Server (GPL)

después de la versión de mysql 5.7+, la contraseña de la columna se reemplazó por el nombre authentication_string de la tabla mysql.user.

Espero que estos pasos ayuden a todos, gracias.


15

Estaba usando ubuntu 18 y simplemente instalé MySQL (contraseña: root) con los siguientes comandos.

sudo apt install mysql-server
sudo mysql_secure_installation

Cuando intenté iniciar sesión con el usuario normal de ubuntu, me estaba lanzando este problema.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Pero pude iniciar sesión en MySQL a través del superusuario. Usando los siguientes comandos, pude iniciar sesión a través de un usuario normal.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Entonces debería poder iniciar sesión en Mysql con la cuenta normal.

ingrese la descripción de la imagen aquí



5

Si recibe este error en Workbench pero puede iniciar sesión desde la terminal, siga estos pasos.

Primero, simplemente inicie sesión con su contraseña actual:

sudo mysql -u root -p

Luego, cambie su contraseña porque tener una contraseña de baja seguridad da error a veces.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Luego simplemente salga y vuelva a iniciar sesión con su nueva contraseña:

quit

sudo mysql -u root -p

Una vez que haya iniciado sesión con éxito, escriba el comando:

use mysql;

Debería mostrar un mensaje como 'Base de datos cambiada' y luego escriba:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Después de ese tipo:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Luego escriba:

FLUSH PRIVILEGES;

Luego simplemente sal:

quit

Ahora intente iniciar sesión con su nueva contraseña en su WORKBENCH. Espero que funcione. Gracias.


4

Enfrenté este problema al instalar Testlink en el servidor Ubuntu, seguí estos pasos

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Ahora detenga la instancia y comience de nuevo, es decir

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

2

Bueno, la forma más fácil de restablecer la contraseña de root es:

  • reiniciar mysqld opción --skip-grant-tables . Esto permite que cualquiera pueda conectarse sin contraseña y con todos los privilegios. Debido a que esto no es seguro, es posible que desee usar --skip-grant-tables junto con --skip-networking para evitar que los clientes remotos se conecten.

  • Conéctese al servidor mysqld con este comando:

  • shell> mysql Emita las siguientes declaraciones en el cliente mysql. Reemplace la contraseña con la contraseña que desea utilizar.

  • mysql> ACTUALIZAR mysql.user SET Password = PASSWORD ('MyNewPass') -> DONDE Usuario = 'root'; mysql> PRIVILEGIOS DE FLUSH;

  • Detenga el servidor, luego reinícielo normalmente (sin las opciones --skip-grant-tables y --skip-networking).

Fuente de documentación de Mysql y experiencia personal:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html



1

Resolví el mismo problema ejecutando Workbench como administrador.

... Supongo que es por restricciones en las computadoras de la empresa, en mi caso ...


0

Pruebe los siguientes pasos para solucionar este problema:

  1. Abra la terminal / símbolo del sistema y navegue hasta la carpeta bin de la carpeta de instalación de MySQL. Luego ejecuta el comandomysqld --console .
  2. Si puedes ver esa línea 171010 14:58:22 [Note] --secure-file-priv está establecida en NULL. Las operaciones relacionadas con la importación y exportación de datos se desactivan después de ejecutar el comando anterior desde el símbolo del sistema.
  3. Entonces necesitas comprobar que el mysqld esté bloqueado por el Firewall de Windows u otro programa.
  4. Si está bloqueado por el Firewall de Windows, debe desbloquearlo y guardar la configuración.
  5. Para desbloquear la aplicación mysqldo mysql, siga los pasos a continuación:
    1. Vaya al símbolo del sistema y escriba wf.mscpara abrir la configuración del firewall.
    2. Haga clic en Permitir una aplicación o función a través del Firewall de Windows.
    3. Marque las instancias mysqldo mysqldestán disponibles en la lista y marque la casilla de verificación del dominio, público y privado, y guarde la configuración.
  6. Regrese a la carpeta bin y vuelva a intentar el comando del paso 1.
  7. Debería funcionar bien y no mostrar ningún error.

¡Debería ser posible ejecutar la consola MySQL sin ningún problema ahora!


0

Resolví el mismo problema usando el siguiente sql y reiniciando el servidor MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';

0

Trabajé en Access Denied for User 'root' @ 'localhost' (usando contraseña: SÍ) durante varias horas, he encontrado la siguiente solución,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections

0

No creo que tengas que escapar del --init-fileparámetro:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Debiera ser:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt


0

para el problema anterior, su contraseña en el sistema debe coincidir con la contraseña que ha pasado en el programa porque cuando ejecuta el programa, verifica la contraseña del sistema, ya que ha dado root como usuario, por lo que le da un error y al mismo tiempo el registro no se elimina de la base de datos.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Mantenga la contraseña de su sistema como jacob234 y luego ejecute el código.


0

Para mí fue el mismo problema, pero fue causado porque estaba usando el servidor mysql en 32 (bits) y el banco de trabajo se estaba ejecutando en la versión de 64 (bits). el servidor y el banco de trabajo deben tener la misma versión.

xpress



0

Estaba enfrentando el mismo problema cuando intento conectar la base de datos Mysql usando la aplicación Laravel. Me gustaría recomendar que compruebe la contraseña del usuario. La contraseña de MySQL no debe tener caracteres especiales como # , & , etc.


En bluehost, la eliminación de caracteres especiales de la contraseña solucionó el problema.
Mena
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.