Шифрование SQLite в Microsoft.EntityFrameWork
В настоящее время я пытаюсь зашифровать базу данных SQLite с помощью официального расширения SEE при использовании структуры сущностей Microsoft.
Я могу зашифровать базу данных при использовании ADO.NET. Однако возникает ошибка «Вы указали пароль в строке подключения, но собственная библиотека SQLite« e_sqlite3 »не поддерживает шифрование» при использовании работы с фреймами сущности.
Используемые пакеты Nuget:
[Microsoft.EntityFrameWork.Core Microsoft.EntityFrameWork.Core.SQLite SQLite.Encryption.Extension System.Data.SQLite.Core]
Подскажите, пожалуйста, как исправить эту ошибку с помощью официального расширения SEE?
CustomDBContext.cs:
private readonly bool _created = false;
public CustomDbContext(DBContextOptions<CustomDbContext> options):base(options){
if(!_created)
{
_created = true;
Database.EnsureCreated();
}
}
public DbSet<SampleEntity> SampleEntities {get; set;}
Program.cs:
static void Main(string[] args)
{
var services = new ServiceCollection();
ConfigureService(services);
using ServiceProvider provider = services.BuildServiceProvider();
provider.GetService<ICustomDBContext>();
}
private static void ConfigureServices(ServiceCollection services)
{
string password = Convert.ToHexString(Encoding.Default.GetBytes("aes256:test");
SQLiteCommand.Execute("PRAGMA activate_extensions='see-7bb07b8d471d642e'", SQLiteExecuteType.NonQuery,@"Data Source=c:\users\test.db");
SQLiteConnectionStringBuilder connectionStringBuilder = new(){
ConnectionString = @"Data Source=c:\users\test.db;Password="+password};
SQLiteConnection conn = new(connectionStringBuilder.ConnectionString);
connection.Open();
connection.ChangePassword(password);
services.AddDbContext<CustomDBContext>(options => options.UseSqlite(connection));
}
1 ответ
Чтобы использовать официальное расширение SQLite для шифрования, выберите структуру сущностей до EF6, поскольку библиотека System.Data.SQLite поддерживает только до EF6, а для ядра EF нет прямой поддержки.
Если нам все еще нужно использовать ядро Entity Framework, мы также можем рассмотреть другие варианты, такие как шифрование с использованием SQLCipher, которое поддерживает ядро EF.