Proteja con contraseña una base de datos SQLite. ¿Es posible?

Resuelto Jhonny D. Cano -Leftware- asked hace 15 años • 8 respuestas

Tengo que afrontar un nuevo pequeño proyecto. Tendrá alrededor de 7 o 9 tablas, la más grande de ellas crecerá a una tasa máxima de 1000 filas por mes.

Pensé en SQLite como mi base de datos... Pero necesitaré proteger la base de datos en caso de que alguien quiera cambiar datos de la base de datos.

Mi pregunta principal es:

¿Es posible proteger con contraseña una base de datos sqlite como lo haría al acceder?

El desarrollo sería en C#, pero estoy buscando algo gratuito.

Aceptado

Puede proteger con contraseña una base de datos SQLite3. Antes de realizar cualquier operación, establezca la contraseña de la siguiente manera.

SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.Open();

Entonces la próxima vez podrás acceder a él como

conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();

Esto no permitirá que ningún editor de GUI vea sus datos. Algunos editores pueden descifrar la base de datos si proporciona la contraseña. El algoritmo utilizado es RSA.

Más adelante si desea cambiar la contraseña, utilice

conn.ChangePassword("new_password");

Para restablecer o eliminar la contraseña, utilice

conn.ChangePassword(String.Empty);
Mangesh avatar Jun 22 '2014 08:06 Mangesh

Puede utilizar el cifrado integrado del proveedor sqlite .net (System.Data.SQLite). Ver más detalles en http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx

Para cifrar una base de datos no cifrada existente , o para cambiar la contraseña de una base de datos cifrada , abra la base de datos y luego use la función ChangePassword() de SQLiteConnection:

// Opens an unencrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
// Encrypts the database. The connection remains valid and usable afterwards.
cnn.ChangePassword("mypassword");

Para descifrar una llamada de base de datos cifrada existente ChangePassword()con una contraseña NULLo "":

// Opens an encrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3;Password=mypassword");
cnn.Open();
// Removes the encryption on an encrypted database.
cnn.ChangePassword(null);

Para abrir una base de datos cifrada existente o crear una nueva base de datos cifrada, especifique una contraseña como ConnectionStringse muestra en el ejemplo anterior o llame a la SetPassword()función antes de abrir un nuevo archivo SQLiteConnection. Las contraseñas especificadas en ConnectionStringdeben ser texto sin cifrar, pero las contraseñas proporcionadas en la SetPassword()función pueden ser matrices de bytes binarios.

// Opens an encrypted database by calling SetPassword()
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.SetPassword(new byte[] { 0xFF, 0xEE, 0xDD, 0x10, 0x20, 0x30 });
cnn.Open();
// The connection is now usable

De forma predeterminada, la palabra clave ATTACH utilizará la misma clave de cifrado que la base de datos principal al adjuntar otro archivo de base de datos a una conexión existente. Para cambiar este comportamiento, utilice el modificador KEY de la siguiente manera:

Si está adjuntando una base de datos cifrada utilizando una contraseña de texto sin cifrar:

// Attach to a database using a different key than the main database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY 'mypassword'", cnn);
cmd.ExecuteNonQuery();

Para adjuntar una base de datos cifrada utilizando una contraseña binaria:

// Attach to a database encrypted with a binary key
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY X'FFEEDD102030'", cnn);
cmd.ExecuteNonQuery();
Liron Levi avatar Sep 06 '2009 13:09 Liron Levi

Puede cifrar su base de datos SQLite con el complemento SEE. De esta manera evitas el acceso/modificación no autorizados.

Citando documentación de SQLite:

SQLite Encryption Extension (SEE) es una versión mejorada de SQLite que cifra archivos de bases de datos utilizando AES de 128 o 256 bits para ayudar a evitar el acceso o modificación no autorizados. Todo el archivo de la base de datos está cifrado de modo que, para un observador externo, el archivo de la base de datos parece contener ruido blanco. No hay nada que identifique el archivo como una base de datos SQLite.

Puedes encontrar más información sobre este complemento en este enlace .

rogeriopvl avatar Sep 04 '2009 20:09 rogeriopvl