Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] ¿Websevice vs conexion directa?

From: Arturo Espinosa <arturoea(at)gmail(dot)com>
To: Freddy Martinez <freddy311082(at)gmail(dot)com>
Cc: gilberto(dot)castillo(at)etecsa(dot)cu, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] ¿Websevice vs conexion directa?
Date: 2017-04-24 21:55:20
Message-ID: CALRH_4OUEY+hDU0C8VbCb+Rs_YCtPq-YSKoFHCFAoq1Nh9VzAQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Puedes crear una interfaz hacia tus datos usando stored procedures, de
manera que el cliente nunca haga queries directos sobre la BD y la
implementación interna quedaría encapsulada. Se tendría que investigar si
es posible crear un usuario (en realidad, varios: uno por usuario real del
sistema) y darle permiso de sólo y únicamente ejecutar ciertos stored
procedures (por ejemplo, contenidos en un schema), y que no pudiera hacer
ningún select/insert/update ni nada sobre la BD. Tendrías que hacer un uso
muy avanzado de GRANT para que tus usuarios quedaran bien acotados y no
pudieran hacer operaciones que no les corresponden; sería un tema delicado,
pero no imposible. De todas maneras tendrías que crear una estructura para
manejo de roles y permisos para tus operaciones de alto nivel, de manera
que cada stored procedure aturizado para ejecutarse desde el cliente
hiciera un proceso de autorización previo a proceder con los queries.

Efectivamente el manejo de usuarios en BD, con todo su sistema de grants y
demás, hacen redundante hasta cierto punto a la capa de web cuando esta va
a funcionar sólo como un intermediario. Si no necesitas la capa web y
puedes hacer que tu cliente use directamente el protocolo de comunicación
de Postgres, puede ser un experimento interesante en arquitectura el de ir
directo a la BD.

Desventajas: dependes de los features en manejo de usuarios de la BD. Esto
puede o no ser relevante para tu aplicación. También, dependes de la
seguridad de tu BD como servicio, y tendrías que exponerla a la red, por lo
que tendrías que protegerla bien contra ataques DOS y cosas por el estilo.
Tercera, si después tienes un cliente que no puede usar el protocolo de
Postgres, de todos modos vas a necesitar un gateway por web o algo
parecido. Finalmente, tal vez no podrás prescindir de una interfaz web por
completo, ya que si tu sistema va a hacer operaciones más allá de las
capacidades de la BD, tendrías que ver si las vas a ejecutar usando algo
como plpython y asumir el que la BD se encargue de estos procesos, con la
carga que puede implicar, además de que no sé qué tan adecuado sea al
protocolo de Postgres para recibir gran cantidad de datos y manejar las
posibles condiciones de error.

Yo nunca he hecho esto porque en el balance siempre termino optando por un
gateway muy ligero por web que pase todas las peticiones a la BD, pero
restringiendo estas peticiones a sólo selects sobre un subconjunto de
stored procedures y nada más, con un subsistema redundante de usuarios como
tradicionalmente se hace, y luego haciendo el resto de las operaciones que
no competen a la BD en el web server (manejo de archivos enviados por el
usuario, etc). Pero de nuevo, podría ser un experimento interesante, porque
sí hay bastante empalme entre la funcionalidad que ofrece la BD y el rol
que usualmente el webserver ocupa.

Por cierto, también se podría poner la BD detrás de un tunel de SSH, como
opción para el aspecto de seguridad en la conexión y manejo de credenciales.

Saludos,
Arturo

2017-04-24 15:59 GMT-05:00 Freddy Martinez <freddy311082(at)gmail(dot)com>:

> Nunca va a ser bueno que tus apps se conecten directamente a tus datos… si
> tus datos cambian, entonces tienes que recompilar las aplicaciones para que
> los usuarios tengan la actualización.
>
> Sin embargo, si usas webservice, lo único que vas a tener que actualizar
> es la implementación de tus servicios en el servidor y tus apps no tienen
> por qué enterarse que cambiaste algo en tu base de datos… es más, podrías
> cambiar de Postgres a Mongo (que no es una bd relacional) y tu webservice
> seguiría devolviendo los resultados en el mismo formato sin que tus apps se
> enteren
>
> Otro problema que podrías tener es el de la consistencia de los datos, es
> decir, que no tienes forma de controlar que un usuario elimine un registro
> cuando otro lo está usando o cosas así por el estilo que si tienes tu
> servidor controlando estas cosas no vas a tener problemas con dar solución
> a estas cosas de ser necesario.
>
> que las aplicaiones tiren contra un servicio web está perfecto… que cada
> aplicación actualice por su parte la BD es absolutamente inmantenible… pues
> si necesitas hacer un cambio en la BD, vas a tener que llamar a alguien que
> conozca tooooodo el flujo de todos los sistemas que tocan la BD
>
> no te recomiendo que lo hagas… yo me iría por los servicios web…
>
> igual, va a depender mucho de qué quieres hacer, pues brindas muy poca
> información
>
> saludos
>
>
> =============================================
> *Freddy Martínez García*
> *Senior Software Developer*
>
> *B.S. Computer Science*
> *LinkedIn: *https://ar.linkedin.com/in/freddy-martinez-garcia-47157259
> *“The size of your achievement depends on the size of your goals" *
>
> On April 24, 2017 at 5:49:27 PM, Gilberto Castillo (
> gilberto(dot)castillo(at)etecsa(dot)cu) wrote:
>
>
> Hola a todos,
>
> Me gustaría obtener sus ideas de cual sería la mejor vía para permitir
> el
> intercambio de datos entre distintas aplicaciones.
>
> ¿Sería mejor usar webservice? o ¿sería mejor permitir conexiones
> directas
> a mi data?
>
> --
> Saludos,
> Gilberto Castillo
> La Habana, Cuba
>
>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
>
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message jvenegasperu . 2017-04-24 22:05:31 Re: [pgsql-es-ayuda] ¿Websevice vs conexion directa?
Previous Message Freddy Martinez 2017-04-24 20:59:20 Re: [pgsql-es-ayuda] ¿Websevice vs conexion directa?