Conectar con una base de datos MySQL remota

MySQL tiene algunas particularidades a la hora de realizar una conexión desde un cliente remoto que si no las sabemos nos pueden complicar un poco el acceso a una base de datos MySQL desde una máquina diferente a la que aloja la BD.

Con otras bases de datos, como Oracle o SQL Server, una vez que ningún firewall ni nada por el estilo nos impide acceder desde la máquina cliente a la servidora, con utilizar los datos de acceso de un usuario de base de datos normalmente ya se puede 'entrar'.

Con MySQL, aunque el acceso al puerto, normalmente el 3306, esté abierto, la base de datos puede estar configurada para no dejar pasar conexiones externas, y el resultado es el mismo que si el puerto estuviera cerrado por un firewall:

telnet mysql.dataprix.es 3306
Trying 188.166.233.199...
telnet: connect to address 188.166.233.199: Connection refused
telnet: Unable to connect to remote host

Si se obtiene este resultado conviene consultar en el servidor de MySQL el fichero 'my.cnf', ubicado normalmente en /etc en Linux, o el 'my.ini' ubicado normalmente en la raíz del directorio de datos en el que se ha instalado MySQL en sistemas Windows, y comprobar si contiene las variables bind-address o skip-networking.

Si se encuentra skip-networking y no está comentada, hay que editar el fichero y eliminarla, o convertirla en un comentario para que no tenga efecto y se permitan conexiones externas:

#skip-networking

Si se encuentra bind-address=127.0.0.1 o bind-address= localhost también hay que editarlo y cambiar el valor por el de la ip externa desde la que se quiera conectar (sólo se permite una), o por 0.0.0.0 para dejar pasar todas, y después filtrarlas por otros medios (firewall o seguridad a nivel de control de acceso)

bind-address=0.0.0.0

Con esto, después de reiniciar la base de datos, el telnet anterior ya debería aceptar nuestra conexión externa por el puerto 3306

 

MySQL tiene además un mecanismo de seguridad de control de acceso que tiene en cuenta, aparte del usuario y contraseña, la IP o el dominio de la máquina desde la que se realiza la conexión. Desde el mismo servidor (localhost) normalmente se puede conectar, pero si se accede desde un cliente o servidor externo hay que asegurarse de que la combinación IP/Dominio + Usuario tiene permiso de acceso a la base de datos.

Si hemos pasado la prueba del telnet y al intentar conectar con un usuario/password correcto obtenemos un mensaje de error parecido a este:

Access denied for user 'miuser'@'55.66.77.88' (using password: YES)

Es cuestión de conectar a la base de datos con el usuario administrador, abriendo una sesión en el servidor por ssh, o con phpMyAdmin, por ejemplo, y en la base de datos 'mysql', consultar el valor del campo 'Host' para el 'User' con el que se intenta conectar.

Si el valor es 'localhost', este usuario sólo puede conectar desde el mismo server, por eso se rechaza la conexión remota. Si el valor fuera '%' se podría conectar desde cualquier máquina, y habría que buscar otra razón para el mensaje de error.

Este valor se puede modificar por el dominio o el valor de la ip de la máquina desde la que se quiere conectar, y se pueden utilizar caracteres comodín como % para permitir rangos de ip's.

Para consultar las diferentes opciones, el capítulo Control de acceso, nivel 1: Comprobación de la conexión del manual de referencia de MySQL lo explica detalladamente.

Por ejemplo, para dar acceso y privilegios a 'miuser' para todas las bases de datos del server desde la ip '55.66.77.88':

GRANT ALL PRIVILEGES ON db.* to miuser@'55.66.77.88' IDENTIFIED BY 'password';
flush privileges;

Nota: Para saber qué bases de datos tenemos disponibles en el servidor de MySQL se puede utilizar el comando 'Show databases'. Así se puede consultar el nombre de la base de datos a escribir en lugar del * en 'db.*' si se quiere conceder acceso sólo a alguna BD concreta:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dwh_dataprix       |
| mysql              |
| performance_schema |
| practico           |
| stg_dataprix       |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

 

 

Mi pregunta :Tengo una una

Mi pregunta :Tengo una una MySql DB a la cual accedo via ODBC desde varias PC en una red local con Access Accdb. De MySql utilizo solo las tablas. En las Access tengo los Formularios, Consultas, Reports y algunos módulos con código VBA, por ejemplo un módulo que maneja una impresora Fiscal..puse IP fija en la máquina que aloja la MySql  con lo cual solucioné la conexion en Red via ODBC, Ahora van a inaugurar otro punto de venta remoto, alejado de la máquina que hace que hace de servidor. y deseo comunicarme y acceder a ella via internet. ¿puedo hacerlo? ¿cómo?. Muchas gracias

Luis Roberto Quirolo

 

 

 

Si el ecceso es desde fuera

Si el ecceso es desde fuera de tu red tendrás que hacerlo a través de un dominio o una ip pública, y un direccionamiento al servidor de MySQL. Por ejemplo, http://mysql.midominio.com, http://xxx.xxx.xxx.xxx o http://xxx.xxx.xxx.xxx:1234.

En el router de tu red tendrias que configurar que lo que entre por ese subdominio se redirija a la ip de tu servidor MySQL, que una ip pública redirija directamente al server, o lo que entre por el puerto '1234' de tu ip pública se redirija también a tu server por el puerto que tengas abierto para MySQL.

muchas gracias... estuve

muchas gracias... estuve horas con el error

 

saludos desde patagonia

Hola una pregunta que

Hola una pregunta
que consideraciones deberiamos tomar o cuales con los peligros de seguridad que tendriamos permitimos coneciones remotas y abrimos el puerto 3306 de mysql en nuestro servidor
Gracias

Lo primero recomendable

Lo primero recomendable cuando tu servidor MySQL va a tener acceso vía WAN es cambiar el puerto de salida del Router por ejemplo 3491 apuntando a nuestro server y su port 192.1.6.1 3306.
Los segundo es crear usuarios con solo los permiso necesarios sobre una sola base de datos select, insert, update, create, call, exec.
El 3ero y no menos importante, darle acceso al usuario root solo con localhost.

 Excelente post, muy

 Excelente post, muy concreto

Saludos

Mariano

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.

Si no estás registrado recuerda que tu comentario entrará en una cola de aprobación.

Más información sobre opciones de formato

Enviando este formulario, acepta la política de privacidad de Mollom.

 



 

  BI   |    CRM     |    CMS    |    Tendencias en software empresarial    |    Cloud computing  |    Software libre    |   Internet    |    Movilidad y apps