SQLite 加密扩展 (SEE)

可以使用 SQLite 加密扩展 (SEE) 的副本创建 JavaScript/WASM 版本,但这样做存在一些注意事项。

创建支持 SEE 的 WASM 构建

构建 SQLite WASM 包需要安装了 Emscripten 工具的 Linux 系统。安装这些工具的说明可以在 规范的 sqlite 源代码树 中找到。

安装完成后,创建 SEE 包就像在 SQLite 规范源代码树 的签出副本的顶层目录中执行以下操作一样简单。

$ ./configure --enable-all               # or preferred flags
$ cd ext/wasm
$ . /path/to/emsdk_env.sh                # part of the Emscripten tools
$ make sqlite3.c=/path/to/sqlite3-see.c  # needs to be an absolute path

生成的构建工件都可以在 jswasm 子目录中找到。构建时间当然会根据系统而异。中等配置的 x64 机器通常在大约 45 秒内完成构建。

对于只创建支持 SEE 的构建并且反复创建的用户,可以通过将 sqlite3-see.c 的副本或符号链接放置在构建树的顶层目录中来简化上述操作。

$ ln -s /path/to/sqlite3-see.c .  # only needed once
$ ./configure --enable-all        # or preferred flags
$ cd ext/wasm
$ . /path/to/emsdk_env.sh         # part of the Emscripten tools
$ make

请注意,构建可以使用 -j# 标志并行执行,其中 # 是要运行的并行 make 实例的数量。但是,构建中最耗时的部分不会从这种并行化中获益,因此将 # 设置为任意高值不会显着加快构建速度1

如果一切顺利,构建的输出将以类似以下内容开头。

$ make
using emcc version [3.1.57]
This is an SEE build.
...

如果该 "SEE" 行(或类似的)没有出现,则构建不支持 SEE。也可以检查生成的 JS 源代码以确定它是否是 SEE 构建。

$ grep -w sqlite3_key_v2 jswasm/sqlite3.js

如果产生任何输出,则生成的构建支持 SEE。

在 SEE 构建和非 SEE 构建之间交替时,需要在每次构建之间运行 make clean,否则构建可能会直接失败或在不包含 SEE API 的情况下静默失败。

使用 SEE 构建

SEE 构建的使用方式与主发行版相同,但还包括与加密相关的各种 sqlite3 API 函数,例如 sqlite3_key_v2()。这些函数不是使用加密所必需的,因为每个此类 API 也都可以通过 pragma 访问,如 SEE 文档 中所述。JS/WASM 构建中存在特定于 SEE 的函数可以用来将其与非 SEE 构建区分开来。

从 3.46 版开始,oo1 API 支持 SEE,其形式为 DB 类及其子类的构造函数的可选参数


  1. ^ 由于涉及如何构建 sqlite3.wasm 的一些漫长而枯燥的技术原因。