2011-05-06 20 views
9

Tengo un servidor mysql ejecutándose en x.x.x.x, y puedo acceder a él internamente sin problemas (por supuesto). Sin embargo, cuando intento conectarme externamente, es decir, usando mysql workbench o incluso desde un servidor externo, aparece el mensaje de error "Host 'bla.bla.bla' no puede conectarse a este servidor MySQL".¿Accediendo a una base de datos mysql desde un host/ip externo? (es decir: banco de trabajo mysql)

he hecho:

  • GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY "somepass";
  • Y he abierto el puerto 3306 en iptables.

¿Hay otro problema de seguridad fundamental que me falta?

+0

si 'x.x.x.x' es su IP de servidor y tiene acceso de subvención de esta IP solamente, tou no se puede conectar de otros ip –

+0

Eso es lo que pensé, ¿hay forma de otorgar acceso desde otro host/ip? – Jon

+0

conceda privilegios a '[email protected]%.for any.host' –

Respuesta

14

que tiene que hacer

GRANT ALL PRIVILEGES ON *.* TO [email protected]'bla.bla.bla' ... 

La parte que sigue al @ es el anfitrión de la que viene la conexión, por lo que han permitido únicas conexiones procedentes de localhost. Debe permitir el acceso desde cada host remoto necesario (o todos los hosts - ... [email protected]'%' ... - si corresponde).

+1

Ahhhhhhhh ... ¡gracias! "%" era la solución que se necesitaba. Sabía que había una forma de otorgar acceso global. Sin embargo, supongo que esto no es una buena idea para un servidor de producción. – Jon

+0

no funcionó para mí :-( –

+1

No olvides usar FLUSH PRIVILEGES; – jonazu

0

¿Se está conectando como usuario mysql? Usted puede tratar de ejecutar la consulta GRANT como: GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY "somepass";

+0

acaba de ver su edición. Ignora mi sugerencia de consulta. ¿Cómo se ve tu /etc/my.cnf? –

+0

Sí, lo hice, y también creé un usuario secundario y le concedí todo a ese usuario, fue en vano. Me doy cuenta de que el problema es que estoy accediendo a un servidor remoto de MySQL, solo me pregunto cómo otorgar acceso a un usuario remoto. (Es decir, conectarse a mi servidor remoto usando mysql workbench en mi computadora portátil) – Jon

+0

podría ser algo relacionado con su archivo my.cnf? ¿Tiene 'bind-address = x.x.x.x' allí? –

-2

comentario la línea:

bind-address = localhost 
#bind-address = localhost < this is what it should look like. 

en su archivo my.conf MySQL. Normalmente se encuentra en /etc/mysql/my.conf.

+1

No. Si ese fuera el caso, el host obtendría un error de "conexión rechazada" (porque no habría escucha de socket), no un error de "acceso denegado" del servidor MySQL. –

0

¿Has verificado que mysql workbench está intentando conectarse usando el nombre de usuario apropiado? ¿Tiene flushed the privileges después de ejecutar el comando de concesión?

3

Cuando tengo mi servidor, incluso tuve el mismo problema al acceder a la aplicación de cliente mysql de MySQL, Luego otorgué el permiso de Mysql, con la siguiente consulta.

funcionó muy bien

**GRANT ALL PRIVILEGES ON db_base.* TO db_user @'%' IDENTIFIED BY 'db_passwd';** 

db_base is the database Name 
db_user is database User 
db_passwd is the database password 

Una vez que se ejecuta este ras que, por el comando FLUSH PRIVILEGES;

siguiente Supongamos que si usted está buscando para dar privilegios para acceder a ciertas tablas en la base de datos se puede utilizar el siguiente comando

GRANT ALL PRIVILEGES ON db_base.HELLOWORLD TO db_user @'%' IDENTIFIED BY 'db_passwd'; 

Dónde HELLOWORLD es la tabla Nombre

8

para resolver este se necesitaba para llevar a cabo los siguientes comandos:

mysql -u root -p 
[enter in your password] 
CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'aC0MPL3XPa33W0RD'; 
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION; 
0

No sé los pormenores de la seguridad detrás de este bind-address cosa, sólo el aprendizaje mediante la instalación de un servidor Debian en una máquina de caja virtual. Este invitado tiene una tarjeta de red virtual configurada como un puente, por lo que el resto de la casa puede verla. Su IP es 192.168.1.4. En otra computadora (192.168.1.3), la conexión falló con bind-address = 127.0.0.1. Configurar bind-address = 192.168.1.4 funciona bien. (su propia dirección, literalmente) Debe ser la interpretación de 127.0.0.1 dentro de una configuración virtual, no estoy seguro ...

4

tuve la situation.my exactamente similares MySQL está instalado en un centOS. El camino hacia Nirvana es el siguiente.

  1. bind-dirección: no funcionaba
  2. conceder el permiso: no funcionó
  3. Iptables cuando están apagados: funcionó.

SOLUCIÓN: Yo fui a pescar en las iptables e hice siguientes cambios:

  1. acceso a los iptables usando el comando: vim/etc/sysconfig/iptables
  2. Si encuentra las siguientes afirmaciones COMENTARIO ellos agregando un '#' al comienzo de la línea.

    -A ENTRADA -s 123.123.123.123/32 -p tcp -m estado --state NUEVO tcp -m --dport 3306 -j ACCEPT

    ENTRADA

    -A -j REJECT --reject-with ICMP -host-prohibido

    -A OUTPUT -p tcp tcp -m --dport 3306 -j ACCEPT

  3. Reiniciar los iptables usando el comando: service iptables restart

Sí, que trabajaron para mi. Espero que sea útil para alguien.

+0

No estoy seguro de si esto ayuda a alguien excepto a Ti, pero toma mi voto positivo por Tu esfuerzo y volverás a stackoverflow y publica esto aquí por si acaso. :) –

Cuestiones relacionadas