Как мне спроектировать свое приложение таким образом, чтобы контрольные журналы нельзя было редактировать или удалять?
У меня есть эта проблема, когда мне нужны контрольные журналы (обычно хранящиеся в БД), которые нельзя редактировать и удалять даже для администраторов баз данных и системных администраторов.
Одним из способов является применение шифрования и контрольных сумм, но это позволяет только обнаруживать изменения или предотвращать отслеживание. Это не мешает администратору базы данных просто удалить строку.
Любая дискуссия по этому вопросу приветствуется.
3 ответа
Если вы хотите, чтобы контрольные журналы не редактировались даже администраторами баз данных и системными администраторами, вам необходимо хранить их вне оборудования, находящегося под их контролем.
Однако это приведет к той же проблеме - администраторы БД и системные администраторы этой системы смогут их редактировать.
Лучше всего иметь систему, в которой вы храните их в двух разных местах, в которых нет общего администратора и которые периодически проверяются.
В качестве альтернативы вы можете иметь триггеры на обновление / удаление, когда они сделаны конкретным пользователем или конкретным клиентом. Эти триггеры могут быть запрограммированы для отправки электронной почты или текстовых сообщений, если выполняется такое обновление или удаление без приложения.
Должно быть известно - очень хорошо известно в сообществе admin / dba, что такие триггеры существуют. Вы не сможете предотвратить обновления или удаления, но обязательно заставите их держаться подальше от этой таблицы.
Однако, есть еще одна загвоздка, которая заключается в возможности удалить или изменить код триггера.
Существуют архивные системы хранения с однократной записью, такие как Venti из Plan 9. Это не мешает никому с физическим доступом, конечно же, брать магнит на жесткий диск или что-то подобное;)
Достаточно подкованный системный администратор может создать слегка измененную версию данных и заменить ссылку на оценку venti, хотя... и столь же подкованный системный администратор может восстановить исходные данные.
В любом случае, я думаю, что вы могли бы многому научиться, изучая системы хранения данных только на основе приложений. Они имеют большой смысл для хранения контрольных журналов по сравнению с БД.
Существуют устройства, которые действуют как снифферы и способны записывать каждую команду, выполненную в базе данных. IBM Guardium является примером.