#define SQLITE_DETERMINISTIC 0x000000800 #define SQLITE_DIRECTONLY 0x000080000 #define SQLITE_SUBTYPE 0x000100000 #define SQLITE_INNOCUOUS 0x000200000 #define SQLITE_RESULT_SUBTYPE 0x001000000
這些常數可以與偏好的文字編碼進行 OR 運算,作為sqlite3_create_function()、sqlite3_create_function16()或sqlite3_create_function_v2()的第四個參數。
對於任何具有副作用或可能洩漏敏感資訊的應用程式定義的 SQL 函式,建議使用 SQLITE_DIRECTONLY 旗標。這將防止應用程式被誘騙使用資料庫檔案的攻擊,該資料庫檔案的結構定義已被暗中修改,以有害的方式呼叫應用程式定義的函式。
有些人認為,在所有應用程式定義的 SQL 函式上設定 SQLITE_DIRECTONLY 是一個好的做法,無論它們是否對安全性敏感,因為這樣做可以防止這些函式在資料庫結構定義內被使用,從而確保可以使用通用工具(例如 命令列介面)檢查和修改資料庫,而這些工具無法存取應用程式定義的函式。
SQLITE_INNOCUOUS 與 SQLITE_DETERMINISTIC 類似,但不完全相同。random() 函式是無害但不確定性的函式範例。
某些較高的安全性設定(SQLITE_DBCONFIG_TRUSTED_SCHEMA 和 PRAGMA trusted_schema=OFF)會停用在 VIEW 和 TRIGGER 內以及結構定義(例如 CHECK 約束、DEFAULT 子句、表達式索引、部分索引 和 生成的欄位)中使用 SQL 函式,除非該函式標記了 SQLITE_INNOCUOUS。大多數內建函式都是無害的。建議開發人員避免對應用程式定義的函式使用 SQLITE_INNOCUOUS 旗標,除非已仔細審核該函式,並且發現沒有潛在的安全副作用和資訊洩漏。