Home Otros artículos Conectarse a una base de datos local desde Internet

PostHeaderIcon Conectarse a una base de datos local desde Internet

Usar puntuación: / 15
MaloBueno 

Hace poco se me presentaba la necesidad de conectarme externamente a una base de datos. Para hacernos una idea, se trataba de conectar una aplicación desarrollada en php a una base de datos en MySql almacenada en un equipo de mi red local.

Yo tengo instalado MySql como parte de la aplicación XAMPP. Vamos a declararque en realidad vamos a trabajar con 3 direcciones IP: A la dirección en la que se encuentra la aplicación la llamaremos IP_aplicación; A la dirección IP pública del lugar, aquella con la que nos conectamos a Internet se llamará IP_Pública; Y a la dirección IP del equipo que almacena la base de datos en la red local la llamaremos IP_local.

La IP Pública la da el proveedor de servicios de Internet. Debe ser fija. Supongamos que nos han asignado la dirección 291.58.12.7

Para conseguir la conexión desde el exterior hay que seguir los siguientes pasos

En primer lugar hay que modificar el archivo my.ini que se encuentra en la carpeta bin de mysql. Este archivo contiene la configuración de MySql. Hay que buscar una línea que pone

bind-address = 127.0.0.1

y sustituirla por esta otra:

bind-address = 0.0.0.0

Lo que hemos hecho ha sido decirle a MySql que acepte las conexiones desde cualquier dirección IP.

A continuación debemos modificar el firewall del equipo servidor de la base de datos y abrir los puertos del equipo. El puerto por defecto para MySql es el puerto 3306 (aunque se puede cambiar en el fichero my.ini). Yo siempre recomiendo cambiar el puerto por defecto para no dar pistas.

En tercer lugar debemos abrir el puerto del router para que automáticamente desvíe al equipo que hace de servidor de la base de datos todas las conexiones que se hagan. El lugar en el que se encuentra depende del router en concreto pero suele ser en la opción Firewall, Port Forwarding, NAT… Dentro de la opción hay que rellenar los siguientes campos:

IP remota: Se puede dejar en blanco en caso de que se vaya a hacer las conexiones desde cualquier ordenador de Internet, o bien rellenarla con la dirección IP del ordenador que permitimos que se conecte. A esta la dirección la llamamos antes IP_Aplicación. Por seguridad recomiendo lo segundo, pero obviamente dependerá de las necesidades. En nuestro caso supondremos que nos conectaremos desde cualquier página.

Puertos externos: Aquí habrá que especificar el rango de puertos de entrada a la página. Supongamos que pondremos el puerto 1600 (como dije antes en algunos routers es necesario que coincidan los puertos externos con los puertos internos).

IP Local: Se refiere a la IP del equipo de la red que actúa como servidor de página web. Es la que llamamos anteriormente IP_Local. Supongamos que se encuentra en la dirección ip 192.168.0.25. Debe ser fija.

Puertos locales: Aquí debemos especificar los puertos que abrimos antes en el firewall del equipo. Por defecto es el 3306

El protocolo usado por MySql es TCP.

Supongo que dependerá del router, pero los puertos externos del router deben coincidir con los puertos del equipo local.

El penúltimo paso es dar los permisos a un usuario para que acceda a la base de datos. Lo más intuitivo y fácil es conectarse como root, pero MySql no lo permite (aunque como todo se puede cambiar). Hay que estudiar bien el acceso para no permitir accesos u operaciones innecesarias o que no se vayan a usar. Por ejemplo: Podemos crear un usuario y darle todos los privilegios en todas las tablas de todas las bases de datos desde cualquier lugar, o bien restringirlo dejándole solamente consultar determinadas tablas de una única base de datos desde un único sitio. Ésto último es lo que vamos a hacer. Como este post no tiene como objetivo mostrar el uso del GRANT nos limitaremos a poner el comando directamente:

GRANT SELECT ON BaseDeDatos.Tabla TO ‘usuario’@’ip_origen’ IDENTIFIED BY ‘clave’

El último paso es la instrucción de acceso a la base de datos en Php. Son dos instrucciones:

mysql_connect(“ip_pública:puerto”, “usuario”, “clave”);

Para nuestro ejemplo sería mysql_connect("291.58.12.7:1600","usuario","clave");

mysql_select_db(“Base_de_Datos”);

No sé si va a servir de resumen o va a liar más las cosas, pero a continuación intentaré mostrar el procedimiento de la conexión en un esquema


 

Comentarios   

 
+1 #5 Administrator 14-07-2016 10:59
Cito a samuel martinez:
Espero me puedan ayudar :sad:
tengo una conexión con php local a una base de datos sql server 2008 local, y funciona muy bien.
Mi problema es al subirla al servidor web. Cuando la subo, cambio la ip local, por la ip fija y el puerto al cual tengo enrutado el sql. y al entrar a la pagina me manda el siguiente error "TCP Provider: An attempt was made to access a socket in a way forbidden by its access permissions."
Ya me he conectado desde otro sql remoto con las mismas credenciales y si funciona, pero cuando lo quiero hacer desde php me marca ese error.
Ojala puedan ayudarme. Gracias

Hola Samuel. Pues no sabría responderte con certeza, porque no he trabajado mucho con SQL Server. ¿Has tenido en cuenta los permisos de usuario? Normalmente un gestor no permite la conexión como root desde Internet. Tendrías que crear un usuario y darle permisos. Así, a simple vista, es lo único que se me ocurre.
Saludos
Citar
 
 
0 #4 samuel martinez 30-06-2016 04:12
Espero me puedan ayudar :sad:
tengo una conexión con php local a una base de datos sql server 2008 local, y funciona muy bien.
Mi problema es al subirla al servidor web. Cuando la subo, cambio la ip local, por la ip fija y el puerto al cual tengo enrutado el sql. y al entrar a la pagina me manda el siguiente error "TCP Provider: An attempt was made to access a socket in a way forbidden by its access permissions."
Ya me he conectado desde otro sql remoto con las mismas credenciales y si funciona, pero cuando lo quiero hacer desde php me marca ese error.
Ojala puedan ayudarme. Gracias
Citar
 
 
0 #3 Administrator 12-05-2016 11:53
Cito a Juan:
Que router seria mas recomendable para este tipo de conexión. Ya que algunos routers son bien lentos.

Hola Juan. No sabría responderte, no soy un experto en Routers. Yo utilizo el típico router que te da movistar cuando contratas Internet, pero eso sí, con una dirección IP pública fija.
Saludos
Citar
 
 
0 #2 Juan 11-05-2016 15:54
Que router seria mas recomendable para este tipo de conexión. Ya que algunos routers son bien lentos.
Citar
 
 
0 #1 - 10-07-2015 21:08
:-)
Citar
 

Escribir un comentario


Código de seguridad
Refescar

PostHeaderIcon Más Comentado

PostHeaderIcon Últimos Comentarios

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy1497
mod_vvisit_counterAyer1493
mod_vvisit_counterEsta semana10796
mod_vvisit_counterLa semana pasada10142
mod_vvisit_counterEste mes27354
mod_vvisit_counterEl mes pasado44972
mod_vvisit_counterTodos los días1432924

We have: 154 guests online
Hoy es: Dic 16, 2017