none
Conectar base de datos SQL con c# desde distintas redes RRS feed

  • Pregunta

  • Muy buenas a tod@s!

    He realizado un proyecto en c# desde el cual se accede a una base de datos que se encuentra en mi propio ordenador. Cuando ejecuto la aplicación desde mi ordenador funciona sin problema, incluso creando una máquina virtual (misma red) obtengo buenos resultados.

    Sin embargo, cuando ejecuto la aplicación desde un ordenador conectado a otra red no me funciona. Entiendo que el problema está en la forma de indicar la conexión. Mi cadena de conexión es la siguiente:

    SqlConnection conexion = new SqlConnection("Data source= ip, 1433; Initial Catalog= BBDD; User Id = user; Password = pass; Integrated Security=false");

    He leído muchos foros relacionados con este problema y he configurado todos los puertos, firewall, etc. para poder tener acceso.

    ¿Alguien tiene alguna idea de cuál puede ser el problema?

    Muchas gracias!

    domingo, 8 de marzo de 2020 15:34

Todas las respuestas

  • Tal como tienes la cadena de conexión, debería funcionar desde cualquier red, a condición de que exista conectividad con la tuya. Cerciórate de que la dirección IP que indicas en la cadena de conexión es alcanzable desde la máquina en la que ejecutas el programa, no vaya a ser que estés usando una IP privada detrás de un NAT o algo por el estilo. Y también, lógicamente, que el puerto 1433 no esté bloqueado por algún hardware de red (tal como un firewall) interpuesto entre los dos equipos.

    En resumidas cuentas, el problema no está, como suponías, en la forma de indicar la conexión, que es correcta, sino que es un problema de infraestructura de red y administración de sistemas.

    domingo, 8 de marzo de 2020 18:33
  • hola

    >>cuando ejecuto la aplicación desde un ordenador conectado a otra red no me funciona.

    validaste si esas redes se ven entre si? si realizas un ping de una red a la ip de otra responde ?

    Si te conectas a la db que esta en el sql server de la otra red usando el Management Studio, puedes conectarte ?

    Recuerda que por defecto Sql Server no permite conexiones remotas, sino que debes habilitarlo, tambien podria ser el firewall de windows

    Enable Remote Connection on SQL Server 2008 Express

    esto aplica a sql server 2008 o a cualquier otra version qu esten usando, debes habilitar las conexiones remotas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 8 de marzo de 2020 19:31
  • Tal como tienes la cadena de conexión, debería funcionar desde cualquier red, a condición de que exista conectividad con la tuya. Cerciórate de que la dirección IP que indicas en la cadena de conexión es alcanzable desde la máquina en la que ejecutas el programa, no vaya a ser que estés usando una IP privada detrás de un NAT o algo por el estilo. Y también, lógicamente, que el puerto 1433 no esté bloqueado por algún hardware de red (tal como un firewall) interpuesto entre los dos equipos.

    En resumidas cuentas, el problema no está, como suponías, en la forma de indicar la conexión, que es correcta, sino que es un problema de infraestructura de red y administración de sistemas.

    Buenas Alberto, gracias por responder. ¿Es necesario entonces que ambas redes tengan una conexión entre si? Es decir, si un cliente en otra población, por ejemplo, quiere acceder a la base de datos a través de mi aplicación, ¿debe estar conectado a mi red? ¿Hay alguna otra forma de hacerlo?

    Muchas gracias.

    domingo, 8 de marzo de 2020 22:40
  • hola

    >>¿Es necesario entonces que ambas redes tengan una conexión entre si?

    pero sino como esperas conectarte? digo de forma magina no se trasmiten los datos

    >>si un cliente en otra población,

    que seria "otra poblacion" ? si esta en otra area minimamente necesitara conexion a internet y usando esta se podria establecer una VPN a la red local

    >>quiere acceder a la base de datos a través de mi aplicación, ¿debe estar conectado a mi red?

    depende, la verdad no te explican muy claro de donde a donde quieres conectarte

    por ejemplo, si tu aplicacion es web y la expones a internet no se necesita ninguna conexion a tu red

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 8 de marzo de 2020 22:50
  • ¿Es necesario entonces que ambas redes tengan una conexión entre si? Es decir, si un cliente en otra población, por ejemplo, quiere acceder a la base de datos a través de mi aplicación, ¿debe estar conectado a mi red?

    Creo que el problema aquí está en la interpretación del término "conectado". Tiene que estar conectado en el sentido de que tiene que ser factible transmitir paquetes IP desde una red a la otra. No significa que tengas que tener un cable conectando directamente una red con la otra. Pueden ser dos redes conectadas cada una de ellas a Internet y con sus routers respectivos configurados de tal manera que permitan transmitir paquetes de una a otra. Ten presente que, en general, esto NO ocurre de forma predeterminada. Lo más normal es que de manera predeterminada las dos redes estén configuradas para usar un bloque de direcciones privadas (que no se enrutan a través de Internet) y que salgan al exterior mediante un mecanismo que se llama NAT ("Network Address Translation"), usualmente implementado dentro del router. Con esta configuración, solo hay acceso "saliente" desde cada red al exterior, pero no "entrante" desde el exterior al interior de la red privada. Esto implica que el equipo que está en la otra red no puede conectarse a uno que está en el interior de la tuya, porque no hay acceso "entrante" desde el exterior a tu red.

    Hay, por supuesto, alternativas para esto: habilitar una VPN (red virtual privada), configurar NAT-inverso en el router, asignar una dirección pública a la máquina que está en tu red, etc. Pero todas ellas implican labores de administración de redes, no hay ninguna forma de que puedas activar esto solo con modificar tu programa o su cadena de conexión.

    lunes, 9 de marzo de 2020 7:14
  • ¿Es necesario entonces que ambas redes tengan una conexión entre si? Es decir, si un cliente en otra población, por ejemplo, quiere acceder a la base de datos a través de mi aplicación, ¿debe estar conectado a mi red?

    Creo que el problema aquí está en la interpretación del término "conectado". Tiene que estar conectado en el sentido de que tiene que ser factible transmitir paquetes IP desde una red a la otra. No significa que tengas que tener un cable conectando directamente una red con la otra. Pueden ser dos redes conectadas cada una de ellas a Internet y con sus routers respectivos configurados de tal manera que permitan transmitir paquetes de una a otra. Ten presente que, en general, esto NO ocurre de forma predeterminada. Lo más normal es que de manera predeterminada las dos redes estén configuradas para usar un bloque de direcciones privadas (que no se enrutan a través de Internet) y que salgan al exterior mediante un mecanismo que se llama NAT ("Network Address Translation"), usualmente implementado dentro del router. Con esta configuración, solo hay acceso "saliente" desde cada red al exterior, pero no "entrante" desde el exterior al interior de la red privada. Esto implica que el equipo que está en la otra red no puede conectarse a uno que está en el interior de la tuya, porque no hay acceso "entrante" desde el exterior a tu red.

    Hay, por supuesto, alternativas para esto: habilitar una VPN (red virtual privada), configurar NAT-inverso en el router, asignar una dirección pública a la máquina que está en tu red, etc. Pero todas ellas implican labores de administración de redes, no hay ninguna forma de que puedas activar esto solo con modificar tu programa o su cadena de conexión.

    Muchísimas gracias por la explicación, da gusto aprender con gente como vosotros.

    Voy a probar entonces a habilitar una VPN. Si no me equivoco, se puede hacer desde el propio código cierto? He leído algo acerca de DotRas. Si puedo hacerlo te agradecería muchísimo una pequeña explicación de cómo hacerlo para tener un camino a seguir.

    Muchas gracias!

    lunes, 9 de marzo de 2020 10:10
  • Voy a probar entonces a habilitar una VPN. Si no me equivoco, se puede hacer desde el propio código cierto?

    Maticemos esto: Hay dos sitios en los que se tiene que configurar la VPN: la parte servidora y la parte cliente. En la parte cliente se puede hacer por codigo a condicion de que el programa se ejecute con permisos suficientemente elevados. Pero en la parte servidora, no. Hay que configurar el router para que soporte la VPN, bien sea directamente implementada en el router o bien sea abriendo los puertos oportunos si se va a hacer por software en algun equipo de la red interna. Esto hay que hacerlo desde la interfaz administrativa del propio router; normalmente no se puede hacer por codigo porque cada router es distinto y se configura de distinta manera.
    lunes, 9 de marzo de 2020 14:28
  • Buenos días amigo,

    Te comento que puedes realizar tus pruebas con un software que genere VPN virtuales como por ejemplo puedes usar uno que se llama "Hamc.." no te termine el nombre del programa ya que no es de microsoft por lo cual no te lo puedo comentar aquí pero ya con eso creas tu VPN virtual y luego a tu cadena de conexión la generas como un try catch como si te estuvieras conectando a bases de datos en cluster. Ejemplo

    Lo que realizas aquí es que le dices al sistemas que si no detecta que la conexión es por la red local lo hará por la red virtual y con eso ya te funcionara si te diera algún error por favor brindamos imagen para ver de que manera te podemos apoyar mas.

    Try{

    Conexion de tu red local

    }

    catch{

    Conexion de tu red virtual

    }

    Nota: Si mi respuesta te funciona por favor no olvides marcarla como respuesta. con esto ayudaras a personas que tengan el mismo problema a saber como se soluciono tu pregunta.


    Jonathan Samayoa

    lunes, 9 de marzo de 2020 17:21