SQLite3::setAuthorizer

(PHP 8)

SQLite3::setAuthorizer — Встановлює callback-функцію, яка буде використовуватися як авторизатор для обмеження дій висловлювання

Опис

public SQLite3::setAuthorizer(?callable $callback): bool

Встановлює callback-функцію, яка буде викликатися SQLite щоразу під час виконання дії (читання, видалення, модифікація тощо.). Це використовується при підготовці SQL-виразів з ненадійного джерела, щоб гарантувати, що SQL-вирази не намагатимуться отримати доступ до даних, які їм не дозволено бачити, або щоб вони не намагалися виконати шкідливі вирази, що ушкоджують базу даних. Наприклад, програма може дозволити користувачеві вводити довільні SQL-запити для виконання у базі даних. Але програма не хоче, щоб користувач міг вносити довільні зміни до бази даних. Тоді можна встановити авторизатор, який забороняє використання будь-яких виразів, крім SELECT, поки готується введений користувачем SQL запит.

Callback-авторизатор може бути викликаний кілька разів кожного висловлювання, підготовленого SQLite. Запити SELECTилиUPDATE будуть викликати авторизатор для кожної колонки, що зчитується або модифікується.

Виклик авторизатора може використовуватися до п'яти параметрів. Перший параметр передається завжди, його тип - ціле число (int) (код дії), що збігається з константою SQLite3. Інші параметри надсилаються лише для деяких дій. Ця таблиця описує другий і третій параметри відповідно до дії:

Список кодів дії та параметрів

ДействиеВторой параметрТретий параметр
SQLite3::CREATE_INDEXІм'я індексуІм'я таблиці
SQLite3::CREATE_TABLEІм'я таблиціnull
SQLite3::CREATE_TEMP_INDEXІм'я індексуІм'я таблиці
SQLite3::CREATE_TEMP_TABLEІм'я таблиціnull
SQLite3::CREATE_TEMP_TRIGGERІм'я тригераІм'я таблиці
SQLite3::CREATE_TEMP_VIEWІм'я уявленняnull
SQLite3::CREATE_TRIGGERІм'я тригераІм'я таблиці
SQLite3::CREATE_VIEWІм'я уявленняnull
SQLite3::DELETEІм'я таблиціnull
SQLite3::DROP_INDEXІм'я індексуІм'я таблиці
SQLite3::DROP_TABLEІм'я таблиціnull
SQLite3::DROP_TEMP_INDEXІм'я індексуІм'я таблиці
SQLite3::DROP_TEMP_TABLEІм'я таблиціnull
SQLite3::DROP_TEMP_TRIGGERІм'я тригераІм'я таблиці
SQLite3::DROP_TEMP_VIEWІм'я уявленняnull
SQLite3::DROP_TRIGGERІм'я тригераІм'я таблиці
SQLite3::DROP_VIEWІм'я уявленняnull
SQLite3::INSERTІм'я таблиціnull
SQLite3::PRAGMAІм'я pragmaПерший аргумент, переданий pragma, або null
SQLite3::READІм'я таблиціІм'я колонки
SQLite3::SELECTnullnull
SQLite3::TRANSACTIONОпераціяnull
SQLite3::UPDATEІм'я таблиціІм'я колонки
SQLite3::ATTACHім'я файлуnull
SQLite3::DETACHІм'я бази данихnull
SQLite3::ALTER_TABLEІм'я бази данихІм'я таблиці
SQLite3::REINDEXІм'я індексуnull
SQLite3::ANALYZEІм'я таблиціnull
SQLite3::CREATE_VTABLEІм'я таблиціІм'я модуля
SQLite3::DROP_VTABLEІм'я таблиціІм'я модуля
SQLite3::FUNCTIONnullІм'я функції
SQLite3::SAVEPOINTОпераціяІм'я точки збереження
SQLite3::RECURSIVEnullnull

Четвертим параметром буде ім'я бази даних ("main" "temp" і т.д.), якщо потрібно.

П'ятий параметр callback-авторизатора - ім'я самого внутрішнього тригера або подання, відповідального за спробу отримання доступу, або null, якщо ця спроба отримання доступу зроблена безпосередньо з коду SQL верхнього рівня.

Коли callback-функція повертає **SQLite3::OK**Це означає, що запитана операція прийнята. Коли callback-функція повертає SQLite3::DENY, виклик, що запустив авторизатор, зазнає невдачі з повідомленням про помилку, що пояснює, що доступ заборонено.

Якщо код дії - SQLite3::READ, і callback-функція повертає SQLite3::IGNORE, то підготовлений вираз складається для заміни на null значення колонки таблиці, яке б зчитувалося, якби повернувся код SQLite3::OKВозвратSQLite3::IGNORE може використовуватися, щоб заборонити недовіреному користувачеві доступ до окремих колонок таблиці.

Коли на таблицю посилаються через SELECT, але з неї не витягується жодного значення колонок, (наприклад, у запиті "SELECT count(*) FROM table"), то callback-авторизатор**SQLite3::READ** викликається один раз для цієї таблиці з ім'ям колонки, яке дорівнює порожньому рядку.

Якщо код дії - SQLite3::DELETE, і callback-функція повертає **SQLite3::IGNORE**тоді операція DELETE продовжує свою роботу, але з вимкненою оптимізацією видалення, і всі рядки видаляються окремо.

У поєднанні з базою даних одночасно може використовуватися лише один авторизатор. Кожен виклик SQLite3::setAuthorizer() перезаписує попередній. Вимкнути авторизатор можна, передавши null замість callback-функції. За замовчуванням авторизатор вимкнено.

Callback-авторизатор не повинен робити нічого, що змінює підключення до бази даних, яке викликало callback-авторизатор.

Зверніть увагу, що авторизатор викликається тільки тоді, коли вираз готується, а не тоді, коли воно виконується.

Більш детальну інформацію можна знайти у » Документації SQLite3

Список параметрів

callback

Функцияcallable для дзвінка.

Якщо передано null, то поточний callback-авторизатор буде вимкнено.

Значення, що повертаються

Повертає true у разі успішного виконання або **false**в случае возникновения ошибки.

Помилки

Цей метод не викликає жодних помилок, але якщо авторизатор включений і повертає некоректне значення, то при підготовці виразу буде викликана помилка (або викинутий виняток, залежно від використання методу SQLite3::enableExceptions()

Приклади

Приклад #1 Приклад використання SQLite3::setAuthorizer()****

У цьому прикладі дозволено доступ тільки для читання, і лише деякі з колонок таблиці users будуть повернуті. Інші колонки будуть замінені на null

Loading...

Результат виконання наведеного прикладу:

Array
(
    [id] => 1
    [name] => Pauline
    [password] =>
)