Добавление пароля в файл Sqlite в формах Xamarin

у меня есть приложение формы Xamarin, которое создает базу данных Sqlite.

Microsoft.EntityFrameworkCore.Sqlite используется для создания базы данных. Я хочу добавить пароль к файлу. Я искал в интернете, но, к сожалению, не могу найти никакого очевидного способа. В StackOverflow есть некоторые вопросы, похожие на мой вопрос, однако платформа не является формами Xamarin.

вот вопросы:

Это мой код для создания базы данных:

public class DoctorDatabaseContext : DbContext
{
        private readonly string DatabasePath;

        public virtual DbSet<OperationsNames> OperationsNames { get; set; }
        public virtual DbSet<CommonChiefComplaint> CommonChiefComplaint { get; set; }
        public virtual DbSet<CommonDiagnosis> CommonDiagnosis { get; set; }
        public virtual DbSet<CommonLabTests> CommonLabTests { get; set; }

        public DoctorDatabaseContext(string DatabasePath)
        {
            FixedDatabasePath.Path = this.DatabasePath = DatabasePath;

            Database.EnsureCreated();    
        }    

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite($"Filename={DatabasePath}");    
        }
    }

3 ответов


Я написал пост о шифрование в Microsoft.Данные.SQLite в. Вы можете использовать его в EF Core, перейдя в открытое соединение с UseSqlite.

вместо Microsoft.EntityFrameworkCore.Sqlite, использовать эти пакеты:

  • Microsoft.EntityFrameworkCore.Базы данных SQLite.Ядро
  • SQLitePCLRaw.bundle_sqlcipher

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
    // TODO: Dispose with DbContext
    _connection = new SqliteConnection(_connectionString);
    _connection.Open();

    // TODO: Avoid SQL injection (see post)
    var command = _connection.CreateCommand();
    command.CommandText = "PRAGMA key = '" + _password + "'";
    command.ExecuteNonQuery();

    options.UseSqlite(_connection);
}

нет способа добавить защиту паролем для SQLite db из коробки, есть целое объяснение здесь относительно причины более подробно.

однако, есть хорошее решение, показанное на этом нить используя SQL Chiper для шифрования БД на странице, если вы готовы инвестировать деньги.

Если вы хотите зашифровать и расшифровать весь файл БД по требованию, используйте PCLCrypto.

но как вы заметили, единственный способ достичь такого рода защиты - шифрование вашего файла БД, вы не сможете установить пароль.


Не совсем ответ на ваш вопрос, а предложение. Для хранения данных можно использовать библиотеку Akavache.

есть четыре места хранения : - BlobCache.Значение LocalMachine - запоминающее устройство - BlobCache.Учетная Запись Пользователя настройки. Некоторые системы делают резервную копию этих данных в облаке. - BlobCache.Secure - для сохранения конфиденциальных данных, таких как учетные данные.(зашифрованный) - BlobCache.InMemory-база данных, хранящаяся в памяти. Данные хранится для продолжительности жизни приложение.

надеюсь, что это поможет