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

cs7cruho  于 2022-11-24  发布在  SQLite
关注(0)|答案(2)|浏览(435)

我正在尝试创建一个密码保护的SQLite数据库,使用实体框架核心在WPF应用程序中使用。
我知道如何从现有数据库生成DbContext和实体,但不知道如何创建受密码保护的数据库。加密数据库和受密码保护的数据库之间有什么区别?

2sbarzqh

2sbarzqh1#

我对here所描述的解决方案的流畅性感到惊喜。
1.导航到github repo并向下滚动到步骤。
1.在步骤1至4中安装/移除NuGet。
1.修改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.Tools”,则不需要安装“Microsoft.EntityFrameworkCore.Design”NuGet。
jrcvhitl

jrcvhitl2#

根据这个article和这个issue,目前还没有办法使用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上找到一个免费的程序)。
Here是如何做到这一点的!

相关问题