PDA

Ver la Versión Completa : Diseño BBDD Documental


tcp_ip_es
16-09-2008, 08:32:46
A ver como os cuento. Bueno la cuestión es que voy a empezar un proyecto/aplicación documental. En ella se van a almacenar contratos con clientes escaneados a parte de más info (docs, xls...etc). La cuestión es la de siempre, la ubicación de las imágenes/docs/xls, pero como nunca he tenido que hacer este tipo de aplicación no me he interesado a fondo por el tema.

Poniéndoos al día os digo que voy a utilizar D5 (si si no reíros es tecnología punta) + MyODBC(No quiero ZEOS) + MySQL, puede que a parte de un interface windows utilice un interface web con ASP/PHP ya veremos en un futuro. Los clientes serán w2000 y XP y el servidor un w2003 Server con IIS.

Bueno pues la gran pregunta es ¿Almaceno los documentos (imágenes, docs, xls...) en la propia BBDD mediante campos BLOB o bien solo almaceno en un campo la ruta de los mismos?

Yo, sin profundizar en el tema, optaría por solo almacenar la ruta del documento ya que así la BD no se sobrecarga* pero el problema viene con la seguridad; a parte de la seguridad de la BD tendría que implementar la misma en el W2003 con lo que eso supone, y a la hora de una posible migración de todo el sistema a otro tendría que validar la compatibilidad de archivos.

Sin embargo si utilizo campos BLOB simplemente tendría que implementar la seguridad de la BD y a la hora de migrar de una máquina a otra tan solo me llevaría la BD y punto, el problema es la sobrecarga* de la BD.

(*) El volumen de información va a ser como mucho de unos 5000 registros, pero claro cada registro puede contener x archivos con x megas.

Bueno estoy hecho un lío y no se realmente que hacer, ¿¿podéis echarme una mano??

Se me olvidaba para más información la aplicación va a ser multiusuario

Neftali [Germán.Estévez]
16-09-2008, 09:17:00
Bueno, la teoría dice que el mejor sitio donde almacenar las imágenes es, dentro de la Base de Datos. A priori tienes más facilidades para controlar la seguridad y más sencillez para realiza las copias de seguridad (si la base de datos empieza a ser grande esto puede cambiar); De esta forma parace que la integridad del "conjunto de datos" (datos textuales e imágenes) parece más fiable.

Pero, (todo tiene un pero) desde hace un tiempo para acá (supongo que a medida que los sistemas han ido almacenando más documentos/imágenes) las cosas ya no son tan claras como dice la teoría.

Almacenar las imágenes fuera de la Base de Datos (y el path dentro) puede tener algunas ventajas y eliminar algunos inconveniente.

* Si hay que afrontar una migración de SGBD, esta solución es mucho más sencilla, que si los ficheros estuvieran codificados en el formato (BLOB) de la BD.
* El acceso a las ima´genes es más eficiente si están en un sistema de ficheros (que está preparado para gestionar ficheros) que no si están dentro de la Base de Datos.
* El acceso es más sencillo desde aplicaciones externas como Visualizadores, conversores, Clientes de FTP, Web Browsers,...
* Aunque la cosa va mejorando, las Bases de Datos están pensadas para trabajar con textos y la eficiencia baja cuando trabajan con tipos binarios.


Creo que las cosas no están a priori claras; Estudia bien tu caso; Revisa artículos sobre el almacenamiento de datos binarios en MySQL. Posibles problemas y rendimiento que ofrece.

tcp_ip_es
16-09-2008, 11:04:41
Bueno antes cuando he dicho:

nunca he tenido que hacer este tipo de aplicación

he mentido un poco :D, tengo una aplicación pero no es documental, es de personas, y almaceno su foto en ella directamente en un campo blob de la BD (MySQL), pero claro estamos hablando de 2 o 3 kb por foto y un máximo de 2000 registros, y funciona perfectamente... y en esta nueva voy a almacenar pdf (basicamente) con 2 o 3 Mb cada uno...

Ya he mirado artículos sobre el tema, y me surgen las mismas dudas.... yo estoy más por almacenar el path pero entonces me surge la duda con los permisos, no tendría problema en el sentido que yo tb soy el admin de ese servidor, pero a la hora de definir los perfiles de usuario de la aplicación no se como debería hacerlo....

BlueSteel
16-09-2008, 15:34:11
Bueno antes cuando he dicho:

Ya he mirado artículos sobre el tema, y me surgen las mismas dudas.... yo estoy más por almacenar el path pero entonces me surge la duda con los permisos, no tendría problema en el sentido que yo tb soy el admin de ese servidor, pero a la hora de definir los perfiles de usuario de la aplicación no se como debería hacerlo....

Hola

bueno, yo lo que hago es almacenar el path en un campo de una tabla, y el resto lo almaceno en un directorio compartido a un grupo... ten en cuenta que con w2003s puedes crear grupos de usuarios y si creas un usuario le puedes asignar derecho de lectura y/o escritura sobre la carpeta donde esten los documentos... además, puedes configurar las politicas de grupo desde el w2003s y cuando el usuario se conecte puedes hacer que la ruta donde estan los documentos se configure en el Pc o estación correspondiente

no se si me entendistes, pero al menos yo lo he solucionado con path y carpetas compartidas para un grupo de usuarios

Salu2:p:D

tcp_ip_es
16-09-2008, 16:04:04
Vale creo que tengo claro que lo haré con el path, además me he enterado que los documentos que quieren meter van de 1 a 30 megas, con lo que la BD puede irse de madre como dicen allá en las Américas :D

Seguro que me surgirán dudas asi que os las haré saber!!! Muchas gracias a los dos .... según escribo esto me surge una duda je je je :D mi BD es de contratos con lo que es bastante confidencial (por eso mi duda de meterlo en la BD ) imaginaros que dependiendo del tipo de contrato (o cualquier otro campo de la BD) quiero que el usuario sea lector o no lo pueda ver, como controlo eso via w2003, si estamos hablando que serían lectores o escritores sobre todo un directorio ... no voy a estar controlando los ACL de cada archivo o si :( BlueSteel tu que has realizado una aplicación asi como lo has hecho....

Neftali [Germán.Estévez]
16-09-2008, 16:46:31
mi BD es de contratos con lo que es bastante confidencial (por eso mi duda de meterlo en la BD ) imaginaros que dependiendo del tipo de contrato (o cualquier otro campo de la BD) quiero que el usuario sea lector o no lo pueda ver, como controlo eso via w2003, si estamos hablando que serían lectores o escritores sobre todo un directorio...

Parece claro que los contratos no deberían ser accesibles para todo el mundo.
Debes pensar en dos tipos de protecciones; De acceso o de contenido.

Para protección de acceso los documentos son de acceso libre, pero se protege el acceso a ellos. Ya sea por permisos (si es posible), implementando un servidor de ficheros,...
Para protección por contenido, debes proteger los ficheros en si. Depende del tipo de ficheros que tengas o de si deseas encriptarlos (por ejemplo) desde tu aplicación. En último caso debes tener en cuenta si esos ficheros van a ser accedidos desde fuera y los problemas que eso te puede conllevar.

tcp_ip_es
16-09-2008, 18:19:53
Me parece muy acertado tu consejo. Pero tengo preguntas :D ... primero y resumiendo expongo... La aplicación tendrá:

De Acceso

Usuarios Editores: Podrá anexar contratos (docs pdf) con lo que tendrá permisos de escritura y lectura
Usuarios Lectores: Sólo podra leer los archivos referentes a los contratos.

y de Contenido, dependiendo de ciertos campos (p.ej. tipo de contrato) el usuario podrá desencriptar y leer ese archivo (doc pdf) o no.

Bien me gusta la idea ya que si un usuario quiere acceder "maliciosamente" via explorer windows y es lector pero no puede ver un cierto tipo de contrato como estarán encriptados no los podrá ver, hasta ahi de acuerdo pero ¿Como encripto y desencripto un pdf/doc/xls/etc? ¿Existe ya un componente a tal efecto?


De nuevo muchas gracias por vuestra dedicación...

BlueSteel
16-09-2008, 20:18:17
Hola

Lo que mejor puedes hacer es la validadción de tu sistema por Usuarios.... Además, cuando un usuario ingrese al Sistema, ese debe haber iniciado la sesión de windows....

Entonces ya tienes una doble validación... la validación del sistema (documental) te permite realizar las acciones que estimes conveniente.... la validación de usuario de Windows a través de W2003Server, te permitirá tener acceso restringido o no a ciertas carpetas... por lo cual, si tu creas una carpeta en algun directorio raiz del W2003server y la compartes, pero le asignas privilegio solo a algunos usuarios, aunque los otros tengan el patch no podran ver el contenido...

Solo te vastaria asegurarte que los usuarios no se compartan las claves de acceso... pero como el W2003 Server pide claves cada 42 dias y además que sean de un largo minimo de 7 digitos con convinación de letras (mayusculas y minusculas) y numeros... no tendras muchos problemas.... creo

En el W2003Server tambien puedes crear perfiles remotos y asignarlo a un grupo de usuarios....para tu caso creas un Perfil Contratos, y en el asignas todas las carpetas y cosas que puede ver un usuario dentro del Servidor.... Despues asignas al perfil los usuarios que estimes convenientes... y eso es todo..

Bueno, en el perfil puedes modificar de todo, desde protector de pantalla, fondo, menus de inicio, acceso a internet (no estoy seguro de esto) y programas, entre otras cosas...

ve que puedes hacer, realiza una prueba de usuarios y perfiles... y trata de acceder a carpetas compartidas con usuarios asignados y otros que no esten.. a ver que tal...

Salu2:p;)

tcp_ip_es
17-09-2008, 08:24:04
El problema BlueSteel es lo que os decía antes os lo muestro con un ejemplo:

Imaginate que tengo un usuario que solo puede ver contratos del Tipo B con fecha x, esa validación la puedo hacer desde la aplicación y no mostrarle los contratos que no son B y fecha x, pero si el usuario se sabe el camino via explorer podrá acceder al documento ya que será lector de la carpeta contratos, con lo que tendría que ir al propio archivo y quitarle los permisos, lo malo es que tendría que hacer eso por cada archivo ¿Me entiendes? , el caso que la solución que da Neftali de encriptar dichos archivos es correcta pero actualmente no se como encriptar un pdf/doc/xls/etc...

Neftali [Germán.Estévez]
17-09-2008, 10:04:01
Hay muchas soluciones para encriptar ficheros.
Seguro que en estos temas Domingo (Seoane) tiene cosas a decir, pero sin ir más lejos en Torry (VCL/Seguridad) (http://www.torry.net/pages.php?id=519) puedes encontrar muchos componentes que te facilitarán el trabajo.

Es una solución que funciona, y además segun el tipo de protección de acceso que necesites es la única que se me ocurre, ya que a veces los filtros sobre las cosas que los usuarios pueden y no pueden ver, sólo se pueden hacer desde la aplicación, ya que dependen de otros datos de la Base de Datos (Fechas, como tú has dicho, grupos de usuarios, departamentos, niveles de seguridad,...)

Pero insisto, antes de ponerte a implementarla, debes pararte a pensar que luegos no tengas problemas por otro sitio. Por ejemplo, si quisieras acceder a esos datos desde otra aplicación o desde una página web, ten en cuenta que estas elementos que acceden a la Base de Datos se encontarrán los datos encriptados.
No podrás acceder desde otras aplicaciones a la Base de datos directamente.

Un saludo.

tcp_ip_es
17-09-2008, 10:49:20
ya tb había pensado en eso :( porque quería hacer un parte web en asp para acceder a los documentos, y claro si me pillo un componente de encriptación en delphi luego tengo que aplicarlo en asp también... joe que lio yo creía que habría alguna solución más rápida para todo este embrollo :p