Foros del Web » Programación para mayores de 30 ;) » Java »

Necesito Apoyo: Desarrollo de sistema Java y MySQL

Estas en el tema de Necesito Apoyo: Desarrollo de sistema Java y MySQL en el foro de Java en Foros del Web. Buenos días, primero que nada agradecer el tiempo que invertirán dando respuestas a mis dudas. Como usuario registrado soy nuevo en el foro (Este es ...
  #1 (permalink)  
Antiguo 24/04/2015, 11:39
K_J
 
Fecha de Ingreso: abril-2015
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Pregunta Necesito Apoyo: Desarrollo de sistema Java y MySQL

Buenos días, primero que nada agradecer el tiempo que invertirán dando respuestas a mis dudas.
Como usuario registrado soy nuevo en el foro (Este es mi primer Post), pero a través de mucho tiempo sus aportaciones me han sido de gran ayuda, y por ello, decidí registrarme y solicitar su apoyo.
Les comento, actualmente me encuentro desarrollando un sistema en Java como lenguaje de programación y MySQL como SGBD, éste es el primer desarrollo a gran escala que hago y por lo tanto me han surgido infinidad de dudas, mismas que he resulto buscando en este foro y otras partes de la web.
Sin más rodeos, voy a mis dudas no sin agradecer nuevamente todo su tiempo y apoyo.

El sistema, como muchos otros, debe de contar con las clásicas operaciones CRUD, las cuales no son problema alguno, pero, uno de los requisitos era la conexión entre las diferentes bases de datos las cuales están instaladas en diferentes sucursales de la empresa para la cual trabajo.
Bueno, como sabemos, MySQL permite conexiones remotas, mismas que manejo actualmente, he mostrado avances del sistema donde consulto las bases de datos de las demás sucursales, obtengo reportes etc, pero existe un problema y que no sé cuál sea la mejor opción para darle solución:
*- La seguridad de las Bases de Datos.
Las conexiones las estoy realizando (mysql -h HOST -u -p), pero para ello, tuve que dejar el puerto de los routers abiertos y dirigir las conexiones entrantes al servidor, pero esto implica dejar el acceso "libre" a las BD de la empresa para cualquier intruso.
Desde un inicio consideré diferentes opciones, las cuales les comentaré a continuación:
1- Montar una VPN con las sucursales de la empresa. Comencé a montar una VPN (Bajo el SO Windows) y lo logré, sin embargo, nunca pude realizar al menos un ping entre las máquinas conectadas.
2*- Utilicé diferentes programas que montan una VPN, pero por cuestiones del tamaño del proyecto no escudriñé como es debido y no obtuve buenos resultados.
Después de gastar muchos días en el tema (VPN) decidí dejarlo a un lado, y buscar nuevamente cuando llegara el momento.
-----------------------------
Pensé también en utilizar o más bien programar un servidor en Java que se encargue de realizar las conexiones a la BD y regrese la información deseada al cliente, así cerraría los puertos de MySQL en los routers y sólo dejaría abierto el puerto del servidor programado, pero eso implica programación extra, cuando MySQL ya permite conexiones remotas.

Entonces, me gustaría saber si a ustedes se les ha presentado algo similar o igual (Que estoy seguro que sí) y conocer cuál es el camino que siguieron para darle solución.
Sabemos que una cosa es darle solución al problema y que funcione y otra es tomar la más segura y que además funcione.
No me gustaría dejar las BDs abiertas al internet, sé que maneras de dar seguridad a las conexiones es crear usuarios con permisos, establecer IP's etc, pero desconozco qué tan vulnerable sea MySQL, pero igual los puertos quedan abiertos exponiendo la información.

Espero puedan ayudarme con sus consejos y experiencias; les agradezco si alguno de los conceptos que creo yo entender son erróneos me corrijan y, qué mas decir, gracias.
  #2 (permalink)  
Antiguo 25/04/2015, 10:37
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: Necesito Apoyo: Desarrollo de sistema Java y MySQL

Lo recomendable cuando necesitás un sistema distribuído es usar una arquitectura SOA con webservices (pueden ser REST o SOAP, aunque estos últimos ya se han quedado un poco viejos), o si te sentís temerario podes usar un Actor Framework (como Akka u Orleans).

Esto no solo significa un incremento en la seguridad (ya que los web services están especificamente diseñados para estar expuestos en internet y aún así mantener tu software libre de intrusiones), si no también en performance, ya que, por ejemplo, si una determinada operación dentro de la lógica de tu sistema requiere más de una consulta u operación contra la base de datos, el web service es el que se encarga de ejecutar estas operaciones, y estando dentro de la misma LAN que la base de datos te evitás el paso de información a través de internet, que es más costoso en tiempo.

Para ejemplificar:

Código Diagrama:
Ver original
  1. -                     Ubicación 1                                    Ubicación 2
  2.                         [DB]                                            [DB]
  3.                          /\                                              /\
  4.                          ||  (Red LAN)                                   || (Red LAN)
  5.                          \/                                              \/
  6.                     [Web Service]                                  [Web Service]
  7.                          /\                                              /\
  8.                          ||                                              ||
  9.                          ||                Ubicación 3                   ||
  10.                          ||=======>    [Aplicación Cliente]      <=======||    
  11.                           (Red WAN)                              (Red WAN)


Es decir, tu aplicación cliente en la ubicación 3 se comunica con los WebServices de ambas ubicaciones 1 y 2, a través de internet, y éstos hacen operaciones contra las DB a través de sus respectivas redes locales (LAN).

Más allá de todo esto, si estás sobre Windows te recomiendo que uses C#, que es mucho más moderno, productivo y placentero para trabajar que java.

Saludos

Última edición por agleiva; 25/04/2015 a las 10:45
  #3 (permalink)  
Antiguo 25/04/2015, 12:25
 
Fecha de Ingreso: julio-2006
Ubicación: sevilla
Mensajes: 251
Antigüedad: 17 años, 9 meses
Puntos: 5
Respuesta: Necesito Apoyo: Desarrollo de sistema Java y MySQL

No te has planteado hacerlo via web?

tu sistema da entender que seria más lógico un sistema en web que conectase a modo de middleware entre las bd, y ofreciera una interfaz común a todos.
  #4 (permalink)  
Antiguo 25/04/2015, 13:25
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Necesito Apoyo: Desarrollo de sistema Java y MySQL

Buenas K_J,

Como bien apuntas, el problema abrir el servidor MySQL a internet es problemático ya que sobre todo que cualquiera podrá capturar y ver los datos intercentando las peticiones.


La opción de hacer un VPN podría efectivamente solucionar el problema, ya que crea un tunel SSL/TLS que encripta la información. No me parece nada descabellado, pero por desgracia para hacerlo bien exige unos conocimiento técnicos muy altos y solo alguien muy experto podría montarlo y mantenerlo con éxito y garantías.


La opción de arquitectura SOA no no creo que aplique en este caso. SOA está enfocada a conectar sistemas heterogéneos. Por ejemplo, una aplicación Java en CentOS con otra .Net en Windows server, con otra COBOL en Host, con otra C/Unix etc.
Poner una capa de web services, exigiría instalar en cada sucursal un servidor capaz de alojarlos, así como desarrollar la lógica de cada uno de éstos para que interaccione con la base de datos. Eso terminaría siendo inmantenible a la hora de evolucionar las bases de datos y/o si el número de sucursales aumenta. Por otro lado ni siquiera solucinarías tu problema, ya que lo único que harías es exponer en Internet un servidor en lugar del otro.
Por otro lado, el hecho de poner una interfaz Web service en cada sucursal no constituye ni mucho menos una arquitectura SOA. Para ello, se debería partir como mínimo de un bus de servicios, proporcionado por un middleware ESB, que proporcionaría la columna vertebral del sistema. Los web services rest/soap no son más que una posible pieza dentro de la arquitectura. Se puede hacer SOA sin Web Services. Pero bueno, esto es un tema ya muy antiguo que no viene al caso:
http://www.infoq.com/news/2007/07/soa-ws-relation
http://www.onlamp.com/pub/wlg/8951


En fin, yo te recomiendo una solucion parecida a la de la VPN pero mucho más sencilla. Sería securizar MySQL mediante SSL. De esta forma, la comunicación entre la aplicación cliente y cada una de las bases de datos viajaría por Internet, si, pero encriptada.
Configurar MySQL para que utilice SSL es relativamente sencillo:
https://dev.mysql.com/doc/refman/5.7/en/ssl-basics.html


Posteriormente solo necesitas conectarte desde tu aplicación cliente. Para ello la propia documentación de MySQL indica como hacerlo usando el conector JDBC y JSSE:
http://dev.mysql.com/doc/connector-j...using-ssl.html


Un saludo y suerte
__________________
If to err is human, then programmers are the most human of us

Etiquetas: bases-de-datos-general, bd, desarrollo, mysql, sistema
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:16.