БСУБД · transport_lab · 08.10.2026
PostgreSQL ведёт учебный DB-side audit: connect/disconnect, command_tag, ошибки доступа, duration, query_id и объект из плана auto_explain. Gateway отдельно пишет HTTP-след: rid, method, URI, status.
query_id — идентификатор нормализованного запроса / его структуры, а не уникальный идентификатор конкретного выполнения. Для корреляции конкретного события используются также время, DB user, экземпляр и другие признаки аудита.
pg_read_file, pg_ls_logdir, ALTER SYSTEM;permission denied в отрицательных тестах — ожидаемый результат.sNN.sNN_student, БД transport_lab.SELECT clock_timestamp() AS lab03_started_at, current_user, current_database();SELECT booking_ref, fare_amount, currency, status FROM transport.bookings ORDER BY id LIMIT 5;transport.bookings и краткий результат.SELECT payment_ref, amount, currency, method, status FROM transport.payments ORDER BY id LIMIT 5;transport.payments.UPDATE transport.bookings SET status=status WHERE false;permission denied.transport.bookings.DELETE FROM transport.payments WHERE false;permission denied.transport.payments.SELECT clock_timestamp() AS lab03_finished_at, current_user;До демонстрации преподавателя заполните прогноз:
| Действие | Ожидаемый результат | Что должно быть видно в DB audit |
|---|---|---|
| SELECT bookings | успех | пользователь, SELECT, объект bookings |
| SELECT payments | успех | пользователь, SELECT, объект payments |
| UPDATE bookings | отказ | пользователь, ошибка доступа, объект bookings |
| DELETE payments | отказ | пользователь, ошибка доступа, объект payments |
Преподаватель показывает вывод одной штатной команды. Raw-журналы PostgreSQL студенту не выдаются.
sNN, пользователя sNN_student, результат SELECT к transport.bookings и показанный query_id, результат SELECT к transport.payments и показанный query_id, событие permission denied (PASS значит: отказ зафиксирован аудитом), идентификацию экземпляра и строку изоляции как на экране. Если изоляция не выполнялась, не записывайте «утечки нет».query_id — идентификатор нормализованного запроса / его структуры, а не уникальный идентификатор конкретного выполнения. Для корреляции конкретного события используются также время, DB user, экземпляр и другие признаки аудита.
Показанный query_id — fingerprint запроса штатного smoke, а не обязательно тот же номер, что у вашего SELECT в Adminer, если текст запроса другой. Число может быть отрицательным: PostgreSQL пишет этот идентификатор как знаковый 64-битный. Минус не означает ошибку.
| Признак | Gateway diagnostic log | PostgreSQL DB audit |
|---|---|---|
| Уровень | HTTP | СУБД |
| Основные поля | rid, method, URI, status | DB user, command tag, error, duration, object, query_id |
| Объект таблицы | нет гарантии | определяется на стороне БД |
| Общий сквозной ID | отдельный rid | общего ID с gateway нет |
| Корреляция | время + экземпляр | время + DB user + экземпляр |
Ответьте: почему один только HTTP-журнал не доказывает, какая таблица реально была затронута внутри СУБД?
5–8 предложений: какие действия выполнялись; какие разрешены/запрещены; как связать событие с пользователем и объектом; отличие gateway от DB audit; почему аудит не заменяет RBAC и не делает систему SIEM/DAM.
Заполненный протокол ЛР-3: ФИО, стенд, две отметки времени, 2 SELECT, 2 отрицательных теста, прогноз, наблюдения преподавательской демонстрации, сравнение журналов и вывод.