c# - 从内存中加载数据库文件

标签 c# database file memory

我可以将一些文件解密到内存中,然后在不使用硬盘的情况下将其用作普通文件吗?

更确切地说,我想解密一个包含一些敏感数据的 .mdb 文件,并像从磁盘加载一样对其进行操作,但不使用临时文件。 我想也许我可以从解密的字节数组中做一个文件对象或流(仍然需要计算代码),但是,问题是 OleDbConnection 从包含文件名的字符串加载数据。

让我们举个例子:

byte[] someArrayWithTheContentsOfAdotMDBFile = getDecryptedFile();

[...]

//即使我将数组包装到一个文件或流中,加载过程也需要一个文件名

using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\"+ fileNameHere)) // can fileNameHere  be a File object, stream or any trick like that??

编辑:由于答案以这种方式出现,我将标题更改为“正在加载数据库...”。我仍然对从内存中加载任何文件类型感兴趣,但让我们把它留给另一个线程

最佳答案

我不认为 access 可以做到这一点......

但是您使用以下设置来实现您的目标:

  • 使用 SQLite
    它可以使用内存(纯 RAM)作为存储并对其进行操作

  • 使用加密的“SQLite-Dump”(即备份)作为您的传输机制(文件)
    当您需要对其进行操作时,将其加载到内存中,对其进行解密,创建一个空的“SQLite 内存中实例”并从您的解密流中“恢复”

注意:
您要求的方案对于某些数据库引擎(例如 SQLite)是可行的,但是因为您需要解密文件,所以您的应用程序必须包含解密所需的 key 。
这意味着如果有人想读取您的数据库文件,他们可以首先分析您的应用程序、恢复解密 key 等。
如果您使用“对称加密”(例如 AES),那么他们甚至可以在您的应用程序不注意的情况下修改数据库文件。
如果您使用“非对称加密”(例如 RSA),那么他们仍然可以读取它,但他们不能修改数据库文件。

关于安全性的一个非常重要的观点:任何在您不 100% 控制的机器上运行的东西都可以被“破解”——这仅取决于攻击者的能力和动机。

关于c# - 从内存中加载数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887830/

相关文章:

c# - 如何在 C# 的泛型类型参数中使用 Switch...Case?

c# - 使用 .Include 时, Entity Framework 不会加载相关实体,除非上下文知道相关实体

c# - 避免从 C# 代码在 MSSQL Server 上进行 SQL 注入(inject)的算法?

c# - 如何使用 LINQ 知道周期集合中是否存在任何重叠

php - 使用 PDO 和 PHP 将表单中的数据插入 MySQL 数据库

python - 在python中自动替换字符串

PHP MYSQL 搜索最佳结果

mysql - 将 2 个或更多结果合并在一起?

python - 从 Google Drive 获取文件而不将其下载到存储 - Python

java - 如何在 scribe oauthrequest 中添加文件参数?