Целостность данных в базах данных: что это и зачем нужно
Целостность данных в базе данных: виды, угрозы и способы обеспечения
Целостность данных означает, что сведения остаются корректными, согласованными и допустимыми по установленным правилам. Ее поддерживают ограничения базы данных, транзакции, контроль доступа, журналирование и проверенное восстановление.
Целостность, конфиденциальность и доступность
Эти свойства решают разные задачи.
- Конфиденциальность ограничивает доступ к информации.
- Целостность защищает данные от недопустимого изменения и противоречий.
- Доступность обеспечивает получение данных в нужный момент.
Шифрование способно защищать конфиденциальность, но само по себе не исправляет ошибочную запись. Резервная копия помогает восстановить данные, но бесполезна, если организация никогда не проверяла восстановление.
Виды целостности данных
Доменная целостность
Значение должно соответствовать типу и допустимому диапазону. Например, база данных может не принять запись без обязательного идентификатора или не позволить связать заказ с несуществующим клиентом. Конкретные ограничения зависят от модели данных и бизнес-процесса.
Для контроля применяют типы данных, NOT NULL, CHECK и другие ограничения.
Сущностная целостность
Каждая запись должна иметь уникальный идентификатор. Первичный ключ не допускает дублирование и пустое значение.
Ссылочная целостность
Связь между таблицами должна вести к существующей записи. Если заказ ссылается на клиента, такой клиент должен существовать.
Внешний ключ определяет, что произойдет при изменении или удалении связанной записи: запрет операции, каскадное изменение или другое заданное действие.
Целостность бизнес-правил
Часть ограничений зависит от предметной области. Например, дата окончания договора не должна предшествовать дате начала, а сумма платежей не должна превышать сумму счета без отдельного основания.
Такие правила реализуют на уровне базы и приложения. Критичное правило не стоит оставлять только в интерфейсе: другой сервис способен записать данные напрямую.
Основные механизмы СУБД
Ограничения
Сначала определите, каким способом система должна контролировать целостность данных: на уровне структуры БД, ограничений, транзакций, аудита действий пользователей или сочетания этих механизмов. Например, сотрудники могут подключаться к базе данных с автоматизированных рабочих мест, а СУБД фиксирует их действия в журнале. Для корреляции с событиями инфраструктуры такой аудит можно передавать в SIEM.
Документация PostgreSQL подробно описывает ограничения и ссылочную целостность: PostgreSQL Constraints.
Транзакции
Транзакция объединяет несколько операций. Если одна из них завершается ошибкой, система откатывает весь набор. Это защищает от состояния, при котором деньги списались, а связанная запись о переводе не появилась.
Свойства транзакций часто описывают сокращением ACID: атомарность, согласованность, изолированность и долговечность.
Конкурентный доступ
Несколько пользователей способны изменить одну запись одновременно. Уровни изоляции, блокировки и контроль версий помогают избежать потерянных изменений и других аномалий.
Выбор механизма влияет на производительность. Поэтому его проверяют под реальной нагрузкой.
Что нарушает целостность
Причины бывают техническими и организационными:
- ошибка в приложении;
- некорректный импорт;
- сбой во время записи;
- одновременное изменение;
- неверная миграция схемы;
- прямое изменение администратором;
- избыточные права;
- вредоносное действие;
- восстановление несовместимых копий;
- нарушение порядка обмена между системами.
Контроль только на уровне базы не закрывает все причины. Нужны процессы разработки, тестирования, управления доступом и изменениями.
Резервное копирование и восстановление
Резервная копия сохраняет состояние данных на определенный момент. Чтобы она помогла после сбоя, организация должна знать допустимую потерю данных и срок восстановления.
Практический контроль включает:
- несколько поколений копий;
- изоляцию хотя бы части копий от основной инфраструктуры;
- защиту учетных записей резервного копирования;
- проверку целостности файлов;
- регулярное тестовое восстановление;
- фиксацию времени и результата теста.
Успешная запись задания не доказывает, что база восстановится и приложение запустится.
Контроль доступа и аудит
Пользователь должен иметь только нужные права. Приложению не всегда требуется право изменять структуру базы, а аналитик способен работать с представлением без доступа к исходным таблицам.
Для критичных действий полезно фиксировать:
- учетную запись;
- время;
- объект;
- тип операции;
- старое и новое значение, если это допустимо;
- источник подключения;
- идентификатор запроса или сессии.
Журнал должен быть защищен от изменения теми же пользователями, действия которых он фиксирует.
Пример нарушения ссылочной целостности
В базе есть таблицы клиентов и заказов. Приложение удаляет клиента, но оставляет его заказы. Отчеты показывают заказы без владельца, а расчет задолженности дает неверный результат.
Внешний ключ способен запретить удаление клиента, пока существуют заказы, либо выполнить согласованное действие. Но правило нужно выбрать осознанно. Каскадное удаление без проверки способно уничтожить важную историю.
Как Staffcop дополняет защиту
Сотрудники и администраторы подключаются к базе данных с рабочих станций — напрямую или через корпоративные приложения. При этом аудит СУБД фиксирует операции внутри базы, но не всегда показывает, что пользователь делал на устройстве до изменения данных и после него.
Staffcop помогает дополнить эту картину: фиксирует действия на рабочей станции, работу с приложениями, сайтами и файлами. Например, можно сопоставить изменение записей в базе с запуском программы, передачей файла или другой пользовательской активностью.
SIEM объединяет журналы СУБД, события Staffcop и данные из других систем. Корреляция помогает восстановить последовательность действий, выявить подозрительный сценарий и определить приоритет инцидента.
Эти инструменты дополняют механизмы защиты базы данных, но не заменяют их, а также не замещают специализированные инструменты защиты, такие как DBF и аналоги. Ограничения, ключи и транзакции предотвращают часть некорректных операций, а аудит СУБД, Staffcop и SIEM помогают обнаруживать и расследовать изменения.
Коротко о важном
Целостность обеспечивают на нескольких уровнях: схема базы, транзакции, приложение, доступ, резервное копирование и аудит. Ограничения предотвращают часть ошибок, а журналы и копии помогают исследовать и устранять последствия.