MySQL - ERROR 1045 (28000): acceso denegado para el usuario

9

Acabo de instalar una copia nueva de Ubuntu 10.04.2 LTS en una nueva máquina. Me conecté a MySQL como root:

david@server1:~$ mysql -u root -p123

Creé un nuevo usuario llamado repl. Dejé el host en blanco, para que el nuevo usuario pueda tener acceso desde cualquier ubicación.

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

Verifiqué la tabla de usuario para verificar que la nueva respuesta del usuario se haya creado correctamente.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Luego salgo, intento iniciar sesión como respuesta del usuario, pero se deniega el acceso.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

¿Por qué se niega el acceso?

davidjhp
fuente
Intenté soltar al usuario y crear con el host localhost, y esto funcionó. CREAR USUARIO 'repl' @ 'localhost' IDENTIFICADO POR '123'; Pero no quiero restringir al usuario a algún host, preferiría tener cualquier host.
davidjhp

Respuestas:

5

La razón por la que no pudo iniciar sesión repl@'%'tiene que ver con el protocolo de autenticación de usuario de MySQL . No cubre los patrones de los usuarios como uno podría creer.

Mira cómo intentaste iniciar sesión

mysql -u repl -p123

Como no especificó una dirección IP, mysql asume que el host es localhost e intenta conectarse a través del archivo socket. Por eso dice el mensaje de error Access denied for user 'repl'@'localhost' (using password: YES).

Uno pensaría que repl@'%'lo permitiría repl@localhost. Según cómo MySQL realiza la autenticación de usuario , eso simplemente nunca sucederá. ¿Haría esta ayuda?

mysql -u repl -p123 -h127.0.0.1

Lo creas o no, mysql lo intentaría de repl@localhostnuevo. ¿Por qué? El cliente mysql ve 127.0.0.1e intenta el archivo socket nuevamente.

Pruébalo así:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Esto forzaría al cliente mysql a usar el protocolo TCP / IP explícitamente. Entonces no tendría más remedio que el usuario repl@'%'.

RolandoMySQLDBA
fuente
4

Debe emitir localhost específico para él.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

Y trata de conectarte.

Mannoj
fuente
1

El problema son estas dos cuentas, agregadas por defecto.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Un nombre de usuario en blanco es un comodín, así que no importa qué cuenta use, coincide con este usuario si MySQL cree que se está conectando desde localhost o el nombre de su servidor local (servidor1 en este caso) ... ya que no tienen contraseña, ninguna la contraseña que intentas es incorrecta. La autenticación de usuario solo intenta la primera coincidencia, por lo que el usuario que creó nunca se da cuenta cuando su host es localhost (o el nombre de su servidor).

Eliminar estos dos de la mysql. usermesa y luego FLUSH PRIVILEGES;.

O bien, el script mysql_secure_installation puede hacer esto por usted, aunque tiendo a preferir hacer las cosas manualmente.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Michael - sqlbot
fuente
0

Asegúrese de que todos los campos en el conector estén configurados con los detalles correctos

host = "localhost", usuario = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"

Compruebe también los errores en mayúsculas y minúsculas: 1045 no es un error de sintaxis, pero tiene que ver con detalles incorrectos en el conector

Johan Swan
fuente
0

Es posible que la base de datos no esté configurada, solo emita una llamada sin argumentos:

mysql <enter>

Server version: xxx

Copyright (c) xxx

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

Mysql [(none)]> 

Si Mysql debe establecer una contraseña de root, puede usar

mysql_secure_installation
Trucos43
fuente
-2

Esto podría ser un problema con la corrupción de su base de datos mysql. Las tablas dentro de la base de datos mysql, como la tabla de usuario, pueden dañarse y pueden emitirse.

Por favor, verifique esos

myisamchk / var / lib / mysql / mysql / * .MYI

Por lo general, al verificar o arreglar las tablas de myisam, nos gustaría eliminar mysql primero. Si este problema aún no se resuelve, pruébelo también.

Si están corruptos, puede solucionarlos usando

myisamchk --silent --force --fast /path/table-name.MYI

Gracias,

Masood

Masood Alam
fuente