如何创建密码保护的数据库

本文关键字:密码保护 数据库 创建 何创建 | 更新日期: 2023-09-27 18:11:59

我正在尝试创建一个密码保护的SQLite数据库,使用实体框架核心在WPF应用程序中使用。

我知道如何从现有的数据库生成DbContext和实体,但不知道如何创建一个密码保护的数据库。加密数据库和密码保护数据库有什么区别?

如何创建密码保护的数据库

根据这篇文章和这个问题,还没有办法使用Microsoft.Data.Sqlite程序集(EF Core使用)加密数据库。

基于此,以下是我所做的,以使它与EF Core一起工作:

  • 添加System.Data.SQLite.Core包到项目
  • 在配置dbContext时,为optionsBuilder指定您自己的DbConnection:

    var conn = new SQLiteConnection(@"Data Source=yourSQLite.db;");
    conn.Open();
    var command = conn.CreateCommand();
    command.CommandText = "PRAGMA key = password;";
    command.ExecuteNonQuery();
    optionsBuilder.UseSqlite(conn);
    

使用System.Data.SQLite.Core程序集中的SQLiteConnection(可以管理加密数据库)而不是Microsoft.Data.Sqlite程序集中的SqliteConnection是非常重要的。


根据这篇文章,您可以使用内置的SqliteConnection,将Microsoft.Data.Sqlite程序集中附带的sqlite3.dll替换为另一个处理加密数据库的程序集(您可以在这个repo中找到一个免费的程序集)。但我没有测试过。

我惊喜地发现这里描述的解决方案对我来说是如此的流畅。

  1. 导航到github repo并向下滚动到步骤。

  2. 在步骤1到步骤4中安装/删除NuGet

  3. 修改DbContext位:

    public class MyDbContext: DbContext {
      public MyDbContext(): base() {}
      protected override void OnConfiguring(DbContextOptionsBuilder builder) {
          SqliteConnectionStringBuilder builder = new SqliteConnectionStringBuilder();
          builder.DataSource = @"myDatabase.db";
          builder.Password = "myPassword";
          optionsBuilder.UseSqlite(new SqliteConnection(builder.ConnectionString));
      }
      //... and some other unrelated stuff ...
    }
    

一些笔记:

  • 如果你真的不关心现有的数据,删除以前的数据库可能更容易。如果你真的在乎,你可以试试。
  • 如果你已经有了"Microsoft.EntityFrameworkCore"。安装"Microsoft.EntityFrameworkCore. Tools"后,您不需要安装"Microsoft.EntityFrameworkCore. Tools"。设计"NuGet。