2009-06-25 23 views
6

Estoy escribiendo una aplicación cliente de escritorio Java que recupera datos de un servidor MySQL remoto. Para fines de desarrollo, he tenido que conectarme directamente con el servidor MySQL (es decir, con DriverManager.getConnection (databaseURL), etc.), pero he tenido la intención de pasar a utilizar un servicio web (una vez que se había creado). Mi pregunta es si no podría simplemente continuar con la conexión directa.¿Es sensato conectar un cliente de escritorio directamente a MySQL?

¿Cuál es el servicio web que me va a dar aparte de más código para escribir? Tendría que implementar mi propia autenticación; ¿Qué pasa con solo confiar en MySQL?

(Estoy formulando esta pregunta bastante negativa, porque tengo la idea de que este paradigma está algo mal visto en estos días, es por eso que lo estoy preguntando, porque me parece que está perfectamente bien cosa que hacer.)

Gracias por cualquier idea que pueda darme!

Respuesta

2

Bueno, siempre y cuando le dé al cliente un usuario con solo los permisos correctos, no veo nada incorrecto con la conexión directa a MySQL. Tal vez si vas a tener muchos y muchos de estos clientes en ejecución, lo que mantendrá abiertas muchas conexiones con MySQL, mientras que un servicio web podría usar una única conexión y manejar la carga de todos los clientes.

La verdadera utilidad de un servicio web es cuando tiene mucha lógica empresarial que no puede estar en la base de datos. Poner esta lógica en el cliente es una muy mala idea porque los usuarios pueden ejecutar versiones obsoletas, y así sucesivamente. Además, un servicio web le permite tener diferentes tipos de clientes (como un cliente de Windows, un cliente web, etc.) sin tener que reescribir ninguna lógica además de la presentación.

3

varias razones (en ningún orden en particular):

  • Cambiar la lógica de negocio en un solo lugar, los cambios de esquema de base de datos no tienen ningún efecto en los clientes (sólo el servicio)
  • MySQLs sistema de autorización es bastante gruesa
  • más seguro, ya que no es necesario para abrir su base de datos con el mundo exterior
  • servicios web operan a través de los puertos HTTP standart, menos problemas con los cortafuegos
  • no hay necesidad de t o instalar controladores ODBC

Por supuesto, los servicios web no son una panacea universal. Algunas de las anteriores pueden no aplicarse en su caso particular, use lo que sea mejor para usted.

0

Un servicio web le permitirá almacenar datos en caché, reduciendo la tensión en la base de datos. También hará que sea más fácil exponer los datos de su sistema a otros sistemas. Otra cosa es flexibilidad: con un servicio web como otra capa, puede cambiar la cadena de conexión/cambios de esquema para todos los clientes en una sola ubicación, no tendrá que redistribuir el cliente.
¿Alguna vez necesitará alguno de estos? Normalmente no busco paradigmas, como dices, pero creo que un servicio web puede tener sentido. Aún así, solo usted conoce el diseño de su aplicación: ¿Cuántas personas usarán este cliente? ¿Una conexión con el servidor MySQL requiere algún software/configuración especial en la computadora cliente? (Oracle lo hace, por ejemplo).

0

Esto alimenta las otras respuestas, pero considere que si permite que los clientes se conecten directamente a un servidor central, les dará las credenciales necesarias para ejecutar cualquier consulta dentro de la base de datos en la que están trabajando. No estoy seguro qué tan bueno es el soporte en MySQL para limitar el uso de recursos, pero estoy apostando que ahora mismo un cliente determinado podría conectarse a su servidor de base de datos y lanzar una consulta tan mal escrita que pone de rodillas al servidor de su base de datos. No necesariamente harían esto con intenciones maliciosas, quizás solo estén tratando de implementar una función adicional que no pensaste.

Básicamente, lo que el servicio web le permite hacer es quitar algo de potencia del usuario. Poder que no necesitan en este caso. A menos que los clientes ejecuten su propio servidor de base de datos, por supuesto, pero ese es un entorno completamente diferente. (si quieren bloquear su propia base de datos, ese es asunto suyo)

+0

Sí, esto parecía ser un problema importante, pero pensé que podría restringir el acceso de los clientes a los procedimientos almacenados apropiados y todo estaría bien. Sin embargo, quizás haya algo más. –

+0

¿Por qué no incrustar la cadena de conexión con un nombre de usuario/contraseña dentro de la aplicación? De esta forma, la aplicación tiene acceso completo a la base de datos, pero el usuario real aún no conoce las credenciales de inicio de sesión. Obviamente, usted controla el código de la aplicación, entonces, ¿dónde está la preocupación? – JoeCool

+0

@JoeCool para un atacante, encontrar las credenciales es tan simple como ejecutar 'cadenas' en el contenedor desempaquetado. Puede proponer soluciones a eso, pero todos tienen el mismo problema básico que DRM tiene, es decir, en algún momento necesita obtener inicios de sesión de usuario en texto claro en el sistema del usuario. El usuario controla ese sistema para que pueda acceder a él. Todo esto no es un gran problema si su aplicación es algo interno utilizado por 3 empleados a lo largo de toda su vida, más aún cuando realmente se lo distribuye a muchas personas, algunas de las cuales pueden no agradarle demasiado. – wds

0

La conexión directa a la base de datos implica, obviamente, tener la interfaz a su base de datos directamente accesible desde Internet. Lo que significa que a menos que tenga mucho cuidado con la configuración de sus permisos, podría hacer que toda su base de datos sea vulnerable al ataque. Mientras que con un servicio web, el único acceso que cualquier usuario puede tener a la base de datos es el acceso/funcionalidad que está disponible a través del servicio web. Yo diría que asegurar y mantener adecuadamente una base de datos MySQL que está abierta en la red es más una molestia que el código adicional involucrado en la creación de una capa de autenticación del servicio web.

Además, si necesita cambiar sus tablas de alguna manera, deberá actualizar sus aplicaciones cliente, en lugar de simplemente actualizar el servicio web, si sus consultas son generadas por el cliente.

0

Más de una pregunta que una respuesta, ¿cuáles son las implicaciones de velocidad entre los 2 enfoques? es decir, conexión directa a mysql o usando un servicio web

Cuestiones relacionadas