#define SQLITE_DETERMINISTIC 0x000000800 #define SQLITE_DIRECTONLY 0x000080000 #define SQLITE_SUBTYPE 0x000100000 #define SQLITE_INNOCUOUS 0x000200000
Эти константы могут быть OR вместе с предпочтительным кодированием текста как четвертый аргумент для sqlite3_create_function(), sqlite3_create_function16() или sqlite3_create_function_v2().
SQLITE_DIRECTONLY рекомендуется для любой созданной приложением функции SQL, у которой есть побочные эффекты, или это могло бы потенциально пропустить уязвимую информацию. Это предотвратит нападения, в которых применение обмануто в использование файла базы данных, которому изменили его схему тайно, чтобы вызвать определенную применением функцию с режимами, которые вредны.
Некоторые люди говорят, что хорошая практика, чтобы установить SQLITE_DIRECTONLY на всех созданных приложением функциях SQL, независимо от того, являются ли они чувствительными для безопасности, поскольку выполнение этого препятствует тому, чтобы те функции использовались в схеме базы данных, и таким образом гарантирует, что база данных может быть просмотрена и изменена, используя универсальные инструменты (такие, как CLI), у которых нет доступа к определенным применением функциям.
SQLITE_INNOCUOUS аналог SQLITE_DETERMINISTIC, но не является точно тем же самым. Функция random() это пример функции, которая безвредна, но не детерминирована.
Некоторые усиленные настройки безопасности (SQLITE_DBCONFIG_TRUSTED_SCHEMA и PRAGMA trusted_schema=OFF) отключают использование функций SQL в обзорах, триггерах и структурах схемы, таких как ограничения CHECK, DEFAULT, индексы выражения, частичные индексы и произведенные колонки, если функция не помечена SQLITE_INNOCUOUS. Большинство встроенных функций безвредно. Разработчикам рекомендуют избегать использования флага SQLITE_INNOCUOUS для определенных применением функций, если функция не была тщательно ревизована и свободна от потенциально неблагоприятных безопасности побочных эффектов и информационных утечек.