Saya harus menghadapi proyek kecil yang baru. Ini akan memiliki sekitar 7 atau 9 tabel, yang terbesar dari mereka akan tumbuh dengan kecepatan maksimum 1000 baris sebulan.
Saya berpikir tentang SQLite sebagai db saya ... Tetapi saya perlu melindungi db jika ada yang ingin mengubah data dari db
Pertanyaan utama saya adalah:
Apakah mungkin kata sandi melindungi db sqlite seperti yang akan Anda lakukan pada akses?
RDBMS apa lagi yang akan Anda rekomendasikan untuk solusi sekecil itu?
Pengembangannya akan di C #, tapi saya mencari sesuatu yang gratis.
Jawaban:
Anda dapat melindungi sandi SQLite3 DB. Sebelum melakukan operasi apa pun, atur kata sandi sebagai berikut.
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"); conn.SetPassword("password"); conn.Open();
maka lain kali Anda dapat mengaksesnya seperti
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;"); conn.Open();
Ini tidak akan mengizinkan editor GUI untuk melihat data Anda. Beberapa editor dapat mendekripsi DB jika Anda memberikan kata sandinya. Algoritma yang digunakan adalah RSA.
Nanti jika Anda ingin mengubah kata sandi, gunakan
conn.ChangePassword("new_password");
Untuk mengatur ulang atau menghapus kata sandi, gunakan
conn.ChangePassword(String.Empty);
sumber
Anda dapat menggunakan enkripsi built-in dari penyedia sqlite .net (System.Data.SQLite). Lihat detail lebih lanjut di http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx
Untuk mengenkripsi database tidak terenkripsi yang ada , atau untuk mengubah kata sandi database yang dienkripsi , buka database lalu gunakan fungsi ChangePassword () dari 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");
Untuk mendekripsi panggilan database terenkripsi yang ada
ChangePassword()
denganNULL
atau""
kata sandi:// 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);
Untuk membuka database terenkripsi yang ada, atau untuk membuat database terenkripsi baru, tentukan kata sandi
ConnectionString
seperti yang diperlihatkan di contoh sebelumnya, atau panggilSetPassword()
fungsi sebelum membuka yang baruSQLiteConnection
. Kata sandi yang ditentukan dalamConnectionString
harus cleartext, tetapi kata sandi yang disediakan dalamSetPassword()
fungsi mungkin array byte biner.// 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
Secara default, kata kunci Lampirkan akan menggunakan kunci enkripsi yang sama seperti database utama saat melampirkan file database lain ke koneksi yang ada. Untuk mengubah perilaku ini, Anda menggunakan pengubah tombol sebagai berikut:
Jika Anda melampirkan database terenkripsi menggunakan kata sandi cleartext:
// 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();
Untuk melampirkan database terenkripsi menggunakan kata sandi biner:
// 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();
sumber
Gunakan SQLCipher, ini adalah ekstensi sumber terbuka untuk SQLite yang menyediakan enkripsi AES 256-bit transparan dari file database. http://sqlcipher.net
sumber
Anda dapat mengenkripsi database SQLite Anda dengan addon LIHAT. Dengan cara ini Anda mencegah akses / modifikasi yang tidak sah.
Mengutip dokumentasi SQLite:
Anda dapat menemukan info lebih lanjut tentang addon ini di tautan ini .
sumber
Salah satu opsinya adalah VistaDB . Mereka memungkinkan database (atau bahkan tabel) untuk dilindungi kata sandi (dan secara opsional dienkripsi).
sumber
Jika Anda menggunakan FluentNHibernate, Anda dapat menggunakan kode konfigurasi berikut:
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); } }
Metode UsingFileWithPassword (nama file, kata sandi) mengenkripsi file database dan menyetel kata sandi.
Ini berjalan hanya jika file database baru dibuat. Yang lama tidak dienkripsi gagal saat dibuka dengan metode ini.
sumber
Saya tahu ini adalah pertanyaan lama tetapi bukankah solusi sederhananya adalah dengan hanya melindungi file di tingkat OS? Cegah saja pengguna untuk mengakses file dan kemudian mereka tidak dapat menyentuhnya. Ini hanya tebakan dan saya tidak yakin apakah ini solusi yang ideal.
sumber
Mengapa Anda perlu mengenkripsi database? Pengguna dapat dengan mudah membongkar program Anda dan mengetahui kuncinya. Jika Anda mengenkripsinya untuk transfer jaringan, pertimbangkan untuk menggunakan PGP daripada memasukkan lapisan enkripsi ke dalam lapisan database.
sumber