从现有的内存块创建一个内存中的SQLite数据库是否可能?

4
从文档上看,似乎不可能实现,但我想确认一下。这是我的用例:
我想要一个加密的数据库。它只能在内存中解密(程序运行时)。我唯一能想到的方法是在将文件交给SQLite之前从磁盘解密文件。但我找不到任何方法来给SQLite一个指针并说:“这是一个数据库。”也找不到一种序列化内存数据库然后在写入磁盘之前对其进行加密的方法。我假设sqlite3_backup API需要一个未加密的数据库文件?
我正在Android上运行,所以我想使用内置的SQLite,我认为不可能安装SQLite Encryption Extension (SEE)。(在Android上运行也意味着我没有完全访问C++ API,但我们暂且忽略这一点)。
1个回答

1

由于您可以使用sqlite_vfs_register方法从应用程序替换sqlite用于与文件系统交互的函数,因此这应该是可能的。 我没有使用加密扩展的经验,但有可能它也使用这个接口,因此可能甚至可以使用它。


哇,天啊,那个 sqlite3_vfs struct 看起来是一个相当庞大的接口需要实现。我能扩展他们现有的实现吗?对于 C 语言我是个新手。 :-( - Neil Traft
是的,您应该能够扩展现有的实现。使用sqlite_vfs_find获取默认实现。然后,您可以使用相同的函数指针来调用您不需要更改的方法(除了xOpen和可能的xDelete - 魔法发生在您设置为sqlite3_file中的sqlite3_io_methods中),并且您可以从其余部分中调用默认接口中的指针。但是,首先看一下SEE是否使用了该API(我没有它的源代码,所以无法确定),因为它可能正在使用,并且如果它正在使用,则应该可以正常工作。 - Jan Hudec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接