"Acceso denegado para el usuario 'prueba'@'ip'(con contraseña:SÍ)" es un error de MySQL.
Esto significa que a nivel de red todo está funcionando , porque se le negará el acceso como un usuario determinado , el servidor debe haber entendido con qué usuario intentaba conectarse . Entonces, la red, el firewall, el enrutamiento, etc., deben estar funcionando.; el servidor debe estar escuchando, etc..
El problema radica "simplemente" en la autenticación .
Intente conectarse localmente a la base de datos (para anular la autenticación) e inspeccione la tabla de privilegios:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
y recuerda que la línea que te interesa es la que menciona la IP (ya que el mensaje de error especifica la IP y no el nombre de host, en cuyo caso, podría haber sido un problema de DNS; el nombre de host es el nombre de host del que el servidor cree que proviene , no el nombre de host del que realmente proviene).
La coincidencia de usuario/host va de más específico a menos específico . Así que si ya tenías:
user host password
test 1.2.3.4 foo
y corrió,
GRANT... TO [email protected]'%' ... PASSWORD bar
...esta subvención funcionaría desde cualquier lugar excepto 1.2.3.4, donde la contraseña seguiría siendo 'foo'.
Del manual (enlace arriba):
Es posible que te veas obligado a hacerlo
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
para asegurarse de que no haya líneas falsas en la tabla de concesión que se refieran a la 'prueba' del usuario.
(Además, el GRANT debería ser, creo,
GRANT ALL PRIVILEGES ON databasename.*
)
Duda de seguridad (no relacionada con la respuesta)
El manual anterior dice:La especificidad de una dirección IP literal no se ve afectada si tiene una máscara de red, por lo que 192.168.1.13 y 192.168.1.0/255.255.255.0 se consideran igualmente específicos .
Ahora a primera vista 127.0.0.1/0.0.0.0
parece muy específico (e inofensivo) para localhost . La máscara de red, si no me equivoco, asegura que es equivalente a %
, excepto que es increíblemente específico y se ejecutará primero . Por lo tanto
test bar %
test localfoo 127.0.0.1/0.0.0.0
significa que la contraseña para test
desde cualquier lugar no es "bar" en absoluto, pero es "localfoo".
Nadie insertaría tal subvención por error, pero hay error y error .