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?
Respuestas:
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
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íarepl@localhost
. Según cómo MySQL realiza la autenticación de usuario , eso simplemente nunca sucederá. ¿Haría esta ayuda?Lo creas o no, mysql lo intentaría de
repl@localhost
nuevo. ¿Por qué? El cliente mysql ve127.0.0.1
e intenta el archivo socket nuevamente.Pruébalo así:
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@'%'
.fuente
Debe emitir localhost específico para él.
Y trata de conectarte.
fuente
El problema son estas dos cuentas, agregadas por defecto.
http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html
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
.user
mesa y luegoFLUSH 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
fuente
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
fuente
Es posible que la base de datos no esté configurada, solo emita una llamada sin argumentos:
Si Mysql debe establecer una contraseña de root, puede usar
fuente
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
fuente