Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Глава 35. Безопасность данных — не только авторизация

35.1. Авторизация — только один слой

До сих пор основным вопросом был:

Может ли субъект выполнить действие над объектом?

Но безопасность данных шире.

Она включает как минимум:

Authentication
Authorization
Integrity
Confidentiality
Audit
Lifecycle
Operational security

Авторизация определяет допустимость действия.

Она не отвечает на все остальные вопросы.


35.2. Разрешение не определяет форму данных

Пусть:

User A → READ → Customer X

Это ещё не отвечает на вопросы:

Какие поля можно показать?
Можно ли экспортировать данные?
Можно ли передать их другому пользователю?
Можно ли положить их в кэш?
Можно ли записать их в лог?
Можно ли использовать их для аналитики?

Следовательно:

READ permission

не является универсальным разрешением на любое использование результата.


35.3. Конфиденциальность может продолжиться после SELECT

Предположим, база данных вернула разрешённую строку.

Дальше данные могут попасть в:

API response
cache
search index
report
log
message
analytics store
backup

Каждый такой путь становится потенциальной поверхностью раскрытия.

Поэтому:

Database authorization

не заканчивает security architecture.


35.4. Производные данные тоже требуют защиты

Мы уже видели, что security projections являются производными данными.

Но то же относится к бизнес-данным.

Например:

Document
    ↓
Search index
    ↓
Search result

Если исходный документ стал недоступен, индекс не должен продолжать его выдавать.

То же относится к:

  • кэшам;

  • полнотекстовым индексам;

  • embeddings;

  • отчётам;

  • агрегатам;

  • экспортам.

Изменение права может требовать изменения не только ACL.


35.5. Авторизация и целостность

Авторизация отвечает:

Можно ли выполнить действие?

Целостность отвечает:

Что произойдёт с данными, если действие выполнено?

Например, пользователь может иметь:

UPDATE

но это ещё не означает, что любое изменение допустимо с точки зрения предметной области.

Могут существовать правила:

document.state = DRAFT

или:

revision is editable

Это уже не обязательно authorization rule.

Это может быть бизнес-инвариант.


35.6. Аудит не заменяет авторизацию

Аудит отвечает:

Что произошло?

Авторизация отвечает:

Можно ли было это сделать?

Логирование операции после её выполнения не предотвращает несанкционированный доступ.

Поэтому:

Audit ≠ Authorization

Но аудит остаётся частью общей security architecture.


35.7. Технический компонент и субъект

В распределённой системе запрос может выглядеть так:

User A
   ↓
Service B
   ↓
Service C
   ↓
Database

Физический SQL выполняет Service C.

Но бизнес-субъектом действия может оставаться User A.

Поэтому нужно различать:

Authentication source
Technical caller
Business subject
Database connection

Смешение этих понятий может привести к ошибочному разрешению.


35.8. Администратор и доверенные компоненты

Система может иметь операции, выполняемые доверенным компонентом:

rebuild
migration
maintenance
bootstrap

Это не обязательно обычные пользовательские действия.

Поэтому модель доверия к инфраструктурному компоненту должна быть определена отдельно.

Нельзя просто предположить:

service = admin

если архитектура этого явно не утверждает.


35.9. Шифрование и авторизация

Шифрование решает другую задачу.

Оно защищает данные:

at rest
in transit

но не отвечает само по себе на вопрос:

Может ли User A прочитать Object X?

Поэтому:

Encryption ≠ Authorization

Они дополняют друг друга.


35.10. Резервные копии и срок хранения

Обычная authorization model работает с текущими данными.

Но резервная копия может содержать состояние, существовавшее месяц назад.

Удаление или отзыв доступа в основной системе не обязательно означает мгновенное физическое исчезновение информации из backup.

Поэтому:

Retention
Backup
Recovery

имеют собственную security semantics.


35.11. Полная цепочка

В результате архитектуру безопасности данных полезно представлять шире:

Authentication
      ↓
Subject
      ↓
Authorization model
      ↓
Effective permission
      ↓
Object authorization
      ↓
Data enforcement
      ↓
Physical data
      ↓
Response
      ↓
Cache / Log / Index / Export

Каждый переход может создать новую поверхность риска.


35.12. Главный вывод

Авторизация отвечает на важнейший вопрос:

Can(Subject, Action, Object)?

Но безопасность данных требует большего.

Нужно понимать:

кто действует;
что разрешено;
какие данные физически доступны;
что можно изменить;
что записывается в аудит;
куда попадают результаты;
как данные восстанавливаются;
как долго они существуют.

Поэтому authorization model должна быть частью security architecture, но не должна подменять её целиком.