Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Trabajar con máxima seguridad en una base de datos SQLite
#1

Hola

Tengo mi base de datos SQLite en dos sitios una es copia de la otra. Y desearía que en el caso supuesto o remoto que me la quiten, que sea por lo menos muy complicado reventarla.

Alguien me dice como hacerlo, osea, poner máxima seguridad que por supuesto manejarla desde Gambas con esta seguridad.

Como dato soy novato en SQLite y no he tenido experiencia en este tema.

Gracias.
    ¡Gracias!
#2

Lo único que se me ocurre es la encriptes y la desencriptes cada vez que la vayas a usar. Asegurandote que no dejas una copia legible en ningún lugar, claro. Puedes usar sistemas de clave pública/privada o encriptación simétrica, mucho menos segura, ya que utiliza la misma clave para encriptar y desencriptar.

Pero esto conlleva riesgos, si por ejemplo se corrompe de alguna forma. Puedes usar un sistema como el de Whatsapp, que va creando copias encriptadas diariamente y en caso de fallo irrecuperable, sólo pierdes los datos desde el día anterior hasta hoy, siempre menos de 24h.

Otro sistema es encriptar los contenidos, pero la carga que se genera al sistema y la lentitud creo que no compensan.

En fin, no es que sea complicado, pero todo el proceso va a hacer que tu programa se ralentice dependiendo del tamaño de las bases de datos, pero ten en cuenta que siempre habrá una copia "en claro" aunque sólo sea en memoria RAM.

No soy experto en el tema, seguramente habrá alguien que te de otra solución con mejor criterio.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#3

Suscribo lo dicho por jguardon. Encríptala. Una base sqlite es sólo un fichero. Con gb.crypt o con alguna ayuda externa, puedes hacerlo muy sencillamente. Eso sí tu programa lo paga en velocidad.

Saludos

No podemos regresar
    ¡Gracias!
#4

Muchísimas gracias a los dos Smile

Os voy a explicar algo mejor lo que busco. Yo deseo usar de forma transparente, osea, sin nada la base de datos cuando la uso. Y solo en su carga inicial y final desearía por ejemplo ponerle un súper-candado.

Tenéis que verlo como que tengo una bici y cuando la cojo tiene un buen candado que me he comprado en ese súper-ferretero y cuando se lo quito me monto y la uso como cualquiera, pero que cuando llego a casa, candao que te crío.

Eso es lo que yo quiero, candao para abrir y solo una vez y candao pa cerrar la aplicación así tengo mis copias seguras de cualquier mano ajena.

Por favor, una nueva ayudita para dirigir mi inquietud, de verdad que no tengo ninguna experiencia previa. Gracias.
    ¡Gracias!
#5

gb.Crypt lamentablemente sólo usa algoritmos de un solo sentido, es decir, encripta y luego compara. Muy útil para generar y comparar contraseñas pero no es posible desesncriptar después.

Tendrás que recurrir a programas externos vía shell, como gpg y manualmente encriptar el fichero de la base de datos justo antes de salir del programa y desencriptarlo nuevamente cuando abras el programa.

gnupgp, o gnugpg o gpg a secas es el estándar en tareas de encriptación y firma de documentos. Tiene muuucha tela que cortar, pero con un par de comandos muy sencillos será suficiente, con una encriptación simétrica que no es 100% segura, pero suficiente para evitar cotillas.

Dame un rato y te preparo un ejemplo funcional.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#6

Mira aquí https://www.linuxparty.es/18-encriptacio...nsola.html

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • gambafeliz
    ¡Gracias!
#7

Bueno, aquí te dejo un proyecto para que pruebes cómo se encripta y desencripta de modo simétrico mediante gpg un fichero cualquiera, en nuestro caso, el fichero de una base de datos sqlite que he llamado test.db

El algoritmo es muy básico: la primera vez que se ejecuta el programa se comprueba si ya existe un fichero encriptado, en caso contrario se crea o se carga la base de datos para empezar a trabajar con ella.

Cuando acabamos con el programa, se encripta el fichero de base de datos y se borra a continuación el que está en claro, sin encriptar.

La siguiente vez que se abre el programa, se desencripta el fichero encriptado y se borra el que se creó anteriormente, de manera que podemos trabajar con la base  de datos  de nuevo.

Finalmente, cuando cerramos el programa vuelve a encriptarse la BD y se borra el original.

Esto es muy básico, pero ahí lo dejo para que lo perfeccionéis. Hay que tener en cuenta que el método de encriptación no es el más seguro, porque sólo se usa una frase-contraseña que está en una variable String. El programa podría pedirla cada vez mediante un diálogo, pero si se teclea mal o la olvidamos, adiós a la base de datos...

Para  ver en acción el comportamiento del programa, mantén una ventana abierta con tu carpeta de usuario visible, para que veas en tiempo real cómo se crean y se borran los archivos con los que trabajamos.

Si queremos mayor seguridad, gpg puede generar claves públicas y privadas para los usuarios y trabajar de forma asimétrica, mucho más seguro. Pero es bastante tedioso implementar tantas funciones de gpg en un programa de gambas para lo que queremos en este caso, que es evitar miradas indiscretas a la base de datos cuando el programa no está en uso.


Espero que sirva de ayuda, saludos


Archivos adjuntos
.gz DBprotect-0.0.1.tar.gz Tamaño: 13.25 KB  Descargas: 2

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 2 usuarios dicen gracias a jguardon por este post:
  • gambafeliz, Shordi
    ¡Gracias!
#8

Mil Gracias jguardon por tu esfuerzo, lo valoro mucho, creo que es exacto a lo que yo iba buscando es más observo por tu conversación que me has captado. Además con tu ejemplo y con el documento que nos aporta Shordi pues perfecto. Gracias a los dos.

A mi en su momento se me ocurrió comprimir la base de datos con rar o 7zip con contraseña pero no se si sería algo bueno pero si lo lleva el sistema incorporado supongo que será mucho mejor. E incluso pienso que estos compresores usan el comando de sistema pero de forma oculta al usuario.
    ¡Gracias!
#9

Buenas, voy a proponerte no una solución si no un camino para el tema seguridad en Db.
Una opción podría ser que utilizases doker en tu local para construir sobre postgres/mysql todo tu sistema, una vez desarrollado lo podrías colgar de un servidor ya podría ser propio o en la nube que te diera servicio a tu aplicación de escritorio. De eseta forma la seguridad recae sobre el server.
Esto hay que evaluarlo según la aplicación y su portabilidad o escalabilidad.
Saludos.
    ¡Gracias!
#10

Gracias calcena pero que sea SQLite Local para mi es absolutamente perfecto. Yo entiendo que todo lo que no tengo yo esta expuesto y por otro lado es para mi para que conectar fuera de casa. Otra cosa es que te visite a tu tierra y quiera usarlo pero como esta en casa pues no. Pero ahí esta lo chulo de SQLite que la llevas en un pendrive y ta tan ves la info o la manipulas donde quieras.

Gracias
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)