sql >> Base de Datos >  >> RDS >> Mysql

Acceso denegado para el usuario 'test'@'ip' (con contraseña:SÍ)

"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 .