SQLite 加密擴充功能 (SEE)

可以使用 SQLite 加密擴充功能 (SEE) 的副本創建 JavaScript/WASM 組建,但這樣做有一些注意事項。

創建具有 SEE 功能的 WASM 組建

建置 SQLite WASM 套件需要安裝了 Emscripten 工具的 Linux 系統。安裝這些工具的說明可以在 標準 sqlite 原始碼樹 中找到。

安裝這些工具後,從已簽出的 SQLite 標準原始碼樹 的最上層目錄執行以下操作即可輕鬆創建 SEE 套件:

$ ./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

請注意,可以使用 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 APIDB 類別及其子類別建構函式的選用引數的形式支援 SEE。


  1. ^ 由於涉及 sqlite3.wasm 建置方式的冗長且無聊的技術原因。