96 lines
5.3 KiB
Markdown
96 lines
5.3 KiB
Markdown
# Журнал аудита
|
||
|
||
Каждое изменение в системе фиксируется в **журнале аудита** — таблице,
|
||
в которой записано: кто, что, когда, что было до и после.
|
||
|
||
Доступ — в разделе **«Аудит»** в навигации (для пользователей с правом
|
||
INTERNAL и выше).
|
||
|
||
## Что попадает в журнал
|
||
|
||
- Создание, обновление, закрытие записей справочников (`CREATE` / `UPDATE` / `CLOSE`)
|
||
- Создание, обновление, удаление справочников
|
||
- Schema drafts: создание, отправка на ревью, approve, reject, publish
|
||
- Изменения настроек webhook-подписок
|
||
|
||
Технические события (запуск pod'ов, выполнение SQL миграций) — НЕ
|
||
попадают в этот аудит. Они в системных логах.
|
||
|
||
## Структура записи аудита
|
||
|
||
| Поле | Что значит |
|
||
|---|---|
|
||
| **Время** | Когда произошло событие (точное время сервера) |
|
||
| **Пользователь** | Кто сделал изменение (берётся из JWT-токена) |
|
||
| **Справочник** | Какой справочник затронут |
|
||
| **Бизнес-ключ** | Какая конкретно запись (для record-операций) |
|
||
| **Действие** | `CREATE`, `UPDATE`, `CLOSE`, `DRAFT_APPROVE` и т.п. |
|
||
| **Было / Стало** | Diff: что изменилось (для UPDATE) |
|
||
| **Trace ID** | Технический идентификатор для корреляции с логами |
|
||
|
||
## Фильтрация
|
||
|
||
В UI — toolbar с фильтрами:
|
||
- **Справочник** — конкретный или все
|
||
- **Действие** — `CREATE` / `UPDATE` / `CLOSE` и т.д.
|
||
- **Пользователь** — кто сделал
|
||
- **Бизнес-ключ** — конкретная запись
|
||
- **Период** — диапазон дат (используй DateRangePicker)
|
||
|
||
Применяется автоматически при изменении любого фильтра. URL обновляется —
|
||
можно поделиться ссылкой «аудит за вчера на ground_station».
|
||
|
||
## Что искать в аудите
|
||
|
||
### «Кто закрыл запись X?»
|
||
|
||
Фильтр: справочник = `<имя>`, бизнес-ключ = `<код>`, действие = `CLOSE`.
|
||
Видишь оператора, время, причину (если была указана).
|
||
|
||
### «Что менялось вчера в spacecraft?»
|
||
|
||
Фильтр: справочник = `spacecraft`, период = вчера. Сортировка по времени.
|
||
|
||
### «Я подозреваю некорректное изменение»
|
||
|
||
Найди запись, посмотри **diff** колонки «Было / Стало». Если изменение
|
||
действительно неверное — раскрой запись, кликни **«Восстановить эту
|
||
версию»** (создаст новую активную версию из исторической).
|
||
|
||
### «Кто часто меняет конкретный справочник?»
|
||
|
||
Фильтр: справочник + период (последний месяц). В UI отсортируй по
|
||
пользователю — видишь топ-операторов.
|
||
|
||
## Экспорт
|
||
|
||
Кнопка **«Экспортировать»** в правом верхнем — выгрузка в CSV отфильтрованных
|
||
записей. Полезно для:
|
||
- Отчётов руководству («что изменилось за квартал»)
|
||
- Compliance-проверок
|
||
- Анализа в Excel / BI
|
||
|
||
CSV содержит те же колонки, что в UI, плюс полные diff'ы в JSON-формате.
|
||
|
||
## Что НЕЛЬЗЯ найти в аудите
|
||
|
||
- **Чтения** (`READ`) — никто их не записывает (объём огромен, информативная
|
||
ценность низкая)
|
||
- **Изменения настроек системы** на уровне kubernetes / Vault / SSL —
|
||
это в системных логах ops-команды
|
||
- **Изменения вне Ordinis** — если внешняя система сделала свою копию
|
||
справочника и поменяла её, в нашем аудите этого нет
|
||
|
||
## Срок хранения
|
||
|
||
По умолчанию — **бессрочно**. Журнал растёт, но не очищается автоматически.
|
||
|
||
Если требуется retention policy (например, удалять старше 5 лет по GDPR) —
|
||
свяжись с ответственным за систему, это настраивается на уровне БД.
|
||
|
||
## Trace ID — как использовать
|
||
|
||
Если в audit-записи есть trace ID — это можно сопоставить с логами
|
||
бэкенда. Полезно когда ошибка произошла на стороне сервера и нужно
|
||
понять глубинную причину. Скопируй trace ID, отдай в support / ops.
|