Acceso denegado para el usuario 'prueba' @ 'localhost' (usando contraseña: SÍ) excepto el usuario root

100

Estoy enfrentando un problema con el usuario no root / administrador de mysql, estoy siguiendo los pasos a continuación para crear un usuario y sus privilegios, corríjame si lo estoy haciendo mal,

estoy instalando mysqlen RHEL 5.7 64bit, los paquetes se mencionan a continuación, una vez que lo hice rpm install, estamos

  1. creando mysql db usando mysql_install_db, luego
  2. iniciando el servicio mysql entonces
  3. usando mysql_upgradetambién lo estamos haciendo al servidor.

Después de este proceso, puedo iniciar sesión como, rootpero con un usuario que no sea root no puedo iniciar sesión en el servidor:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

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

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Este es el problema al que me enfrento, ¿hay alguna solución para esto?

usuario3061726
fuente
¿Puede iniciar sesión como root y luego hacerlo?SELECT * FROM mysql.user
Noam Rathaus
1
Acepte la respuesta que le funcionó, para que otros usuarios sepan cómo resolvió su problema.
Usuario que no es usuario

Respuestas:

59

No otorgue todos los privilegios sobre todas las bases de datos a un usuario que no sea root, no es seguro (y ya tiene "root" con ese rol)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Esta declaración crea un nuevo usuario y le otorga privilegios seleccionados. ES DECIR:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Eche un vistazo a los documentos para ver todos los privilegios detallados

EDITAR: puede buscar más información con esta consulta (inicie sesión como "root"):

select Host, User from mysql.user;

Para ver que paso

Alberto Megía
fuente
No estoy de acuerdo con esa afirmación sobre root. Sí, no deberías dar súper privilegios a voluntad. Sin embargo, tampoco debería utilizar cuentas compartidas, ya que no tiene una pista de auditoría adecuada dentro de la base de datos. Si debe tener cuentas compartidas, como root, necesita otras cosas envueltas alrededor para asegurarse de que la pista de auditoría esté intacta.
krad
36

Si se está conectando a MySQL utilizando una máquina remota (banco de trabajo de ejemplo), etc., utilice los siguientes pasos para eliminar este error en el sistema operativo donde está instalado MySQL

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Intente iniciar sesión en la instancia de MYSQL.
Esto funcionó para mí para eliminar este error.

Makarand Kulkarni
fuente
1
Ni siquiera eso funciona, ya que genera el error incluso cuando se ejecuta "mysql -u root -p"
Marian Klühspies
25

Tratar:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

O mejor uso: mysql_setpermissionpara crear el usuario

Noam Rathaus
fuente
1
Esto no resuelve el problema. CREAR USUARIO 'goldy' @ '%' IDENTIFICADO POR 'some_pass'; es una consulta válida
pratim_b
Por alguna razón, lo %que debería funcionar para todos los hosts, no lo está resolviendo. Entonces, al especificarlo localhostdebería funcionar. Si eso NO funciona, algo está mal en mysql
Noam Rathaus
13

Parece que estás intentando hacer que un usuario sea 'golden' @ '%' pero un usuario diferente con el nombre de 'golden' @ 'localhost' se interpone en el camino / tiene prioridad.

Haga este comando para ver a los usuarios:

SELECT user,host FROM mysql.user;

Debería ver dos entradas:

1) usuario = dorado, host =%

2) usuario = dorado, host = localhost

Haz estos comandos:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Reinicie MySQL Workbench.

Luego vuelva a ejecutar sus comandos originales:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Luego, cuando intente iniciar sesión en MySQL, escríbalo así:

ingrese la descripción de la imagen aquí

Presione 'Probar conexión' e ingrese su contraseña 'contraseña'.

Gene
fuente
2
Esta es la única solución que encontré aquí que tuvo algún significado. Gracias buen señor.
Sumuk Shashidhar
8

Primero creé al usuario usando:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Después de buscar en Google y ver esto , actualicé la contraseña del usuario usando:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

y podría conectarme después.

ako
fuente
3

Para cualquier otra persona que haya hecho todos los consejos, pero el problema persiste.

Compruebe el procedimiento almacenado y vea DEFINERS. Es posible que esos definidores ya no existan.

Mi problema apareció cuando cambiamos el host comodín (%) a IP específico, haciendo que la base de datos sea más segura. Desafortunadamente, hay algunas vistas que todavía usan 'usuario' @ '%' aunque 'usuario' @ '172 ....' es técnicamente correcto.

Yorro
fuente
Gracias por llevarme por el camino correcto. Ni siquiera sabía acerca de la configuración de seguridad de SQL en vistas y procedimientos almacenados. Terminé configurando SQL Security en Invoker en mis vistas para que usara los permisos del usuario que ejecuta el comando en lugar del usuario que crea la vista. Aquí hay un enlace de referencia: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

También tengo un problema similar, y luego descubrí que es porque cambié mi nombre de host (no localhost).

Por lo tanto, lo resuelvo especificando el --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
fuente
2

Asegúrese de que el usuario tenga una entrada localhost en la tabla de usuarios. Ese era el problema que estaba teniendo. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
fuente
1

Según la forma en que crea su usuario, MySQL interpreta de una manera diferente. Por ejemplo, si crea un usuario como este:

create user user01 identified by 'test01';

MySQL espera que le des algún privilegio usando grant all on <your_db>.* to user01;

No te olvides de flush privileges;

Pero, si crea un usuario así (pasando una dirección IP), debe cambiarlo a:

create user 'user02'@'localhost' identified by 'teste02';

entonces, para dar algunos privilegios tienes que hacer eso:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
fuente
0

En mi caso, ocurrió el mismo error porque estaba tratando de usar mysql simplemente escribiendo "mysql" en lugar de "mysql -u root -p"

lfvv
fuente
0

conecte su servidor desde mysqlworkbench y ejecute este comando-> ALTER USER 'root' @ 'localhost' IDENTIFICADO POR 'yourpassword';

Sachin
fuente
0

Para una búsqueda molesta al llegar aquí después de buscar este mensaje de error:

Acceso denegado para el usuario 'someuser @ someone' (usando contraseña: SÍ)

El problema para mí fue no incluir la contraseña entre comillas. p.ej. Necesitaba usar en -p'password'lugar de-ppassword

ruta quemada
fuente
-8

Simplemente agregue el nombre de la computadora en lugar de 'localhost' en el nombre del host o la dirección del host MySQL.

vipin
fuente