在带有实体框架的SQLite中,我使用以下内容创建数据库:
class MyContext : DbContext
{
// DbSets, OnModelCreating(), etc.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=c:\\test.db");
}
}
//this is in my test method
using (var db = new MyContext())
{
db.Database.EnsureCreated();
}
它可以工作;数据库被创建。但是我想通过在连接字符串中提供密码来加密数据库:
optionsBuilder.UseSqlite("Data Source=c:\\test.db;Password=mypassword");
根据EnsureCreated
,我得到:
System.Data.dll中发生类型为'System.ArgumentException'的未经处理的异常其他信息:不支持的关键字:“密码”。
如何加密SQLite数据库?
3条答案
按热度按时间pxq42qpu1#
这个“纯”的开源sqlite3.dll不支持加密。还有其他的实现,包括许可的和未许可的。
我的解决方案:
1.下载已编译的二进制文件
ngynwnxp2#
根据此答案Protect SQLite database used by EntityFramework Core Application
EF Core使用的是Microsoft.Data.Sqlite,目前还不支持现成的加密。请参阅https://github.com/aspnet/Microsoft.Data.Sqlite/issues/184。您可以使用SQLite扩展自行添加加密。
在提供的GitHub链接中,还有其他链接指向以下位置的替代项:
Encryption in Microsoft.Data.Sqlite
4smxwvx53#
我使用了Tschareck发布的实现:
并设法为我的解决方案设置了密码,解决方案运行良好,但我遇到了另一个问题-我无法使用该密码打开数据库(我使用的是DB Browser for SQL Lite)(当我单击“Ok”时,密码被删除,没有任何React):
printScreen DB Browser