Мне предстоит столкнуться с новым маленьким проектом. В нем будет около 7 или 9 таблиц, самая большая из них будет расти не более чем на 1000 строк в месяц.
Я думал о SQLite как о своей базе данных ... Но мне нужно будет защитить базу данных на случай, если кто-то захочет изменить данные из базы данных
Мой главный вопрос:
Можно ли защитить паролем базу данных sqlite, как при доступе?
Какую еще СУБД вы бы порекомендовали для такого небольшого решения?
Разработка будет на C #, но я ищу что-нибудь бесплатное.
Ответы:
Вы можете защитить паролем базу данных SQLite3. Перед выполнением любых операций установите пароль следующим образом.
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"); conn.SetPassword("password"); conn.Open();
тогда в следующий раз вы можете получить к нему доступ, например
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;"); conn.Open();
Это не позволит редактору графического интерфейса просматривать ваши данные. Некоторые редакторы могут расшифровать БД, если вы укажете пароль. Используемый алгоритм - RSA.
Позже, если вы захотите изменить пароль, используйте
conn.ChangePassword("new_password");
Чтобы сбросить или удалить пароль, используйте
conn.ChangePassword(String.Empty);
источник
Вы можете использовать встроенное шифрование провайдера sqlite .net (System.Data.SQLite). Подробнее см. Http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx
Чтобы зашифровать существующую незашифрованную базу данных или изменить пароль зашифрованной базы данных , откройте базу данных и затем используйте функцию ChangePassword () 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");
Чтобы расшифровать существующий зашифрованный вызов базы данных
ChangePassword()
с помощью пароляNULL
или""
:// 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);
Чтобы открыть существующую зашифрованную базу данных или создать новую зашифрованную базу данных, укажите пароль в,
ConnectionString
как показано в предыдущем примере, или вызовитеSetPassword()
функцию перед открытием новойSQLiteConnection
. Пароли, указанные в,ConnectionString
должны быть открытым текстом, но пароли, предоставленные вSetPassword()
функции, могут быть двоичными массивами байтов.// 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
По умолчанию ключевое слово ATTACH будет использовать тот же ключ шифрования, что и основная база данных, при присоединении другого файла базы данных к существующему соединению. Чтобы изменить это поведение, вы используете модификатор KEY следующим образом:
Если вы подключаете зашифрованную базу данных с использованием пароля в виде открытого текста:
// 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();
Чтобы прикрепить зашифрованную базу данных с использованием двоичного пароля:
// 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();
источник
Используйте SQLCipher, это расширение с открытым исходным кодом для SQLite, которое обеспечивает прозрачное 256-битное шифрование AES файлов базы данных. http://sqlcipher.net
источник
Вы можете зашифровать свою базу данных SQLite с помощью надстройки SEE. Таким образом вы предотвратите несанкционированный доступ / изменение.
Цитата из документации SQLite:
Вы можете найти больше информации об этом дополнении по этой ссылке .
источник
Один из вариантов - VistaDB . Они позволяют защищать базы данных (или даже таблицы) паролем (и при необходимости зашифровывать).
источник
на ваш вопрос о защите паролем вашего sqlite db, я не думаю, что это можно сделать.
вы можете зашифровать его, вот некоторая информация об этом:
http://sqlcrypt.com/
это 149 долларов за платформу.
источник
Если вы используете FluentNHibernate, вы можете использовать следующий код конфигурации:
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); } }
Метод UsingFileWithPassword (имя файла, пароль) шифрует файл базы данных и устанавливает пароль.
Он запускается, только если создан новый файл базы данных. Старый, незашифрованный, не работает при открытии этим методом.
источник
Я знаю, что это старый вопрос, но не было бы простым решением просто защитить файл на уровне ОС? Просто запретите пользователям доступ к файлу, и тогда они не смогут его трогать. Это всего лишь предположение, и я не уверен, что это идеальное решение.
источник
Зачем нужно шифровать базу данных? Пользователь может легко разобрать вашу программу и выяснить ключ. Если вы шифруете его для передачи по сети, рассмотрите возможность использования PGP вместо сжатия уровня шифрования на уровне базы данных.
источник