Tengo que afrontar un pequeño proyecto nuevo. Tendrá alrededor de 7 o 9 tablas, la mayor de ellas crecerá a una tasa máxima de 1000 filas por mes.
Pensé en SQLite como mi base de datos ... Pero tendré que proteger la base de datos en caso de que alguien quiera cambiar los 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?
¿Qué otro RDBMS recomendaría para una solución tan pequeña?
El desarrollo estaría en C #, pero estoy buscando algo gratis.
Respuestas:
Puede proteger con contraseña una base de datos SQLite3. Antes de realizar cualquier operación, configure 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 tarde, si desea cambiar la contraseña, utilice
conn.ChangePassword("new_password");
Para restablecer o eliminar la contraseña, utilice
conn.ChangePassword(String.Empty);
fuente
Puede utilizar el cifrado integrado del proveedor .net sqlite (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ñaNULL
o""
:// 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 para crear una nueva base de datos cifrada, especifique una contraseña
ConnectionString
como se muestra en el ejemplo anterior, o llame a laSetPassword()
función antes de abrir una nuevaSQLiteConnection
. Las contraseñas especificadas en elConnectionString
deben ser texto sin cifrar, pero las contraseñas proporcionadas en laSetPassword()
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, use el modificador KEY de la siguiente manera:
Si está adjuntando una base de datos cifrada con 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 encriptada usando 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();
fuente
Use SQLCipher, es una extensión de código abierto para SQLite que proporciona cifrado AES transparente de 256 bits de archivos de base de datos. http://sqlcipher.net
fuente
Puede cifrar su base de datos SQLite con el complemento SEE. De esta forma evita el acceso / modificación no autorizados.
Citando la documentación de SQLite:
Puede encontrar más información sobre este complemento en este enlace .
fuente
Una opción sería VistaDB . Permiten que las bases de datos (o incluso tablas) estén protegidas por contraseña (y opcionalmente cifradas).
fuente
para su pregunta sobre la protección con contraseña de su base de datos sqlite, no creo que se pueda hacer.
Sin embargo, puede cifrarlo, aquí hay algo de información al respecto:
http://sqlcrypt.com/
son $ 149 por plataforma.
fuente
Si usa FluentNHibernate , puede usar el siguiente código de configuración:
private ISessionFactory createSessionFactory() { return Fluently.Configure() .Database(SQLiteConfiguration.Standard.UsingFileWithPassword(filename, password)) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DBManager>()) .ExposeConfiguration(this.buildSchema) .BuildSessionFactory(); } private void buildSchema(Configuration config) { if (filename_not_exists == true) { new SchemaExport(config).Create(false, true); } }
El método UsingFileWithPassword (nombre de archivo, contraseña) cifra un archivo de base de datos y establece la contraseña.
Solo se ejecuta si se crea el nuevo archivo de base de datos. El antiguo no cifrado falla cuando se abre con este método.
fuente
Sé que esta es una pregunta antigua, pero ¿no sería la solución simple proteger el archivo a nivel del sistema operativo? Simplemente evite que los usuarios accedan al archivo y luego no deberían poder tocarlo. Esto es solo una suposición y no estoy seguro de si es una solución ideal.
fuente
¿Por qué necesita cifrar la base de datos? El usuario podría desmontar fácilmente su programa y averiguar la clave. Si lo está cifrando para la transferencia de red, considere usar PGP en lugar de comprimir una capa de cifrado en una capa de base de datos.
fuente