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 <freddy311...@gmail.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.casti...@etecsa.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@postgresql.org) > > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda > >