RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

Флаги функции

#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_DETERMINISTIC
SQLITE_DETERMINISTIC означает, что новая функция всегда дает тот же самый вывод, когда входные параметры те же самые. Функция abs() детерминирована, например, но randomblob() нет. Функции должны быть детерминированы, чтобы использоваться в определенных контекстах, как с оператором Where частичных индексов или в произведенных колонках . SQLite мог бы также оптимизировать детерминированные функции, учтя их из внутренних циклов.

SQLITE_DIRECTONLY
SQLITE_DIRECTONLY означает, что функция может быть вызвана только от SQL верхнего уровня и не может использоваться в VIEW, TRIGGER или в структурах схемы, таких как ограничения CHECK , DEFAULT, индексы выражения, частичные индексы или произведенные колонки.

SQLITE_DIRECTONLY рекомендуется для любой созданной приложением функции SQL, у которой есть побочные эффекты, или это могло бы потенциально пропустить уязвимую информацию. Это предотвратит нападения, в которых применение обмануто в использование файла базы данных, которому изменили его схему тайно, чтобы вызвать определенную применением функцию с режимами, которые вредны.

Некоторые люди говорят, что хорошая практика, чтобы установить SQLITE_DIRECTONLY на всех созданных приложением функциях SQL, независимо от того, являются ли они чувствительными для безопасности, поскольку выполнение этого препятствует тому, чтобы те функции использовались в схеме базы данных, и таким образом гарантирует, что база данных может быть просмотрена и изменена, используя универсальные инструменты (такие, как CLI), у которых нет доступа к определенным применением функциям.

SQLITE_INNOCUOUS
SQLITE_INNOCUOUS означает, что функция вряд ли вызовет проблемы даже если неправильно используется. Безвредная функция не должна иметь никаких побочных эффектов и не должна зависеть ни от каких значений кроме ее входных параметров. Функция abs() это пример безвредной функции. Функция SQL load_extension() весьма вредна из-за ее побочных эффектов.

SQLITE_INNOCUOUS аналог SQLITE_DETERMINISTIC, но не является точно тем же самым. Функция random() это пример функции, которая безвредна, но не детерминирована.

Некоторые усиленные настройки безопасности (SQLITE_DBCONFIG_TRUSTED_SCHEMA и PRAGMA trusted_schema=OFF) отключают использование функций SQL в обзорах, триггерах и структурах схемы, таких как ограничения CHECK, DEFAULT, индексы выражения, частичные индексы и произведенные колонки, если функция не помечена SQLITE_INNOCUOUS. Большинство встроенных функций безвредно. Разработчикам рекомендуют избегать использования флага SQLITE_INNOCUOUS для определенных применением функций, если функция не была тщательно ревизована и свободна от потенциально неблагоприятных безопасности побочных эффектов и информационных утечек.

SQLITE_SUBTYPE
SQLITE_SUBTYPE указывает SQLite, что функция может вызвать sqlite3_value_subtype(), чтобы просмотреть подтипы его аргументов. Определение этого флага не имеет никакого значения для скалярных или совокупных функций пользователя. Однако, если это не определяется для определенной пользователем оконной функции, тогда от любых подтипов, принадлежащих аргументам, переданным ей, можно отказаться, прежде чем функция окна вызвана (то есть, sqlite3_value_subtype() всегда вернет 0).