Я разрабатываю базу данных и хочу получить информацию аудита для всех измененных значений. Я хочу подтвердить свой подход - если в этом может быть какая-то обратная сторона, я уже рассмотрел существующие вопросы и попробовал несколько. Эта ссылка обобщает почти все структуру базы данных для ведения журнала аудита
Вот о чем я думаю: обычная таблица, скажем audit_info, в которой есть следующие столбцы
-> ID (сгенерированный)
-> TableName
-> Отметка времени
-> beforeHashedValue - это будет вся информация до изменений, хешируемых с помощью ключа
-> afterHashedValue - здесь будет вся информация после изменений, хешированных с помощью ключа
Как это будет работать:
-> Всякий раз, когда значение изменяется, захватить всю строку, зашифровать ее и записать в таблицу аудита
-> Запись в таблицу аудита в асинхронном режиме - Под асинхронным режимом я имею в виду, перед обновлением сохраните изображение текущих данных, если транзакция успешна, подайте ее в какой-то поток, который будет выполнять шифрование и обновлять таблицу
-> Используйте уникальный идентификатор в качестве внешнего ключа в первичной таблице, сохраните его как отдельную строку, запятую для нескольких обновлений
-> Чтобы получить значения, запрос к таблице и упорядочить по отметке времени, чтобы получить исторические значения
-> расшифровать каждую строку, чтобы получить данные временной шкалы
Плюсы:
-> Думаю, это довольно просто
-> Не повлияет на основные таблицы
-> Никакого загромождения в каждой таблице, основные таблицы просто должны хранить внешний ключ для аудита строки (в настоящее время я хранил информацию аудита с каждой таблицей, и это стало кошмаром обслуживания)
-> Для нескольких аудитов можно вести список, разделенный запятыми, который можно использовать для получения значений аудита.
Я считаю, что некоторые минусы:
-> шифрование и дешифрование может занять время
-> А как насчет очень большого объекта? например текст, капли? Как себя ведет шифрование?
-> Если аудит необходим в реальном времени, это может привести к снижению производительности!
-> Нужна логика для сопоставления его с именем таблицы на основе модели предметной области
Учитывая, что:
В моей таблице нет больших двоичных объектов, но в тексте не более 3–4 тыс. Слов.
Нет необходимости в аудите в реальном времени,
Есть ли у этого подхода какие-либо серьезные недостатки?