Есть ли у этого подхода к аудиту базы данных обратная сторона

Я разрабатываю базу данных и хочу получить информацию аудита для всех измененных значений. Я хочу подтвердить свой подход - если в этом может быть какая-то обратная сторона, я уже рассмотрел существующие вопросы и попробовал несколько. Эта ссылка обобщает почти все структуру базы данных для ведения журнала аудита

Вот о чем я думаю: обычная таблица, скажем audit_info, в которой есть следующие столбцы

-> ID (сгенерированный)

-> TableName

-> Отметка времени

-> beforeHashedValue - это будет вся информация до изменений, хешируемых с помощью ключа

-> afterHashedValue - здесь будет вся информация после изменений, хешированных с помощью ключа

Как это будет работать:

-> Всякий раз, когда значение изменяется, захватить всю строку, зашифровать ее и записать в таблицу аудита

-> Запись в таблицу аудита в асинхронном режиме - Под асинхронным режимом я имею в виду, перед обновлением сохраните изображение текущих данных, если транзакция успешна, подайте ее в какой-то поток, который будет выполнять шифрование и обновлять таблицу

-> Используйте уникальный идентификатор в качестве внешнего ключа в первичной таблице, сохраните его как отдельную строку, запятую для нескольких обновлений

-> Чтобы получить значения, запрос к таблице и упорядочить по отметке времени, чтобы получить исторические значения

-> расшифровать каждую строку, чтобы получить данные временной шкалы

Плюсы:

-> Думаю, это довольно просто

-> Не повлияет на основные таблицы

-> Никакого загромождения в каждой таблице, основные таблицы просто должны хранить внешний ключ для аудита строки (в настоящее время я хранил информацию аудита с каждой таблицей, и это стало кошмаром обслуживания)

-> Для нескольких аудитов можно вести список, разделенный запятыми, который можно использовать для получения значений аудита.

Я считаю, что некоторые минусы:

-> шифрование и дешифрование может занять время

-> А как насчет очень большого объекта? например текст, капли? Как себя ведет шифрование?

-> Если аудит необходим в реальном времени, это может привести к снижению производительности!

-> Нужна логика для сопоставления его с именем таблицы на основе модели предметной области

Учитывая, что:

В моей таблице нет больших двоичных объектов, но в тексте не более 3–4 тыс. Слов.

Нет необходимости в аудите в реальном времени,

Есть ли у этого подхода какие-либо серьезные недостатки?


person cpandey05    schedule 27.10.2014    source источник
comment
@ Нил МакГиган, я имею в виду шифрование, а не хеш (односторонний хеш как md5), соответственно изменился   -  person cpandey05    schedule 27.10.2014
comment
Вы пару раз упоминали об использовании списков, разделенных запятыми. Вы можете подумать об этом еще раз. Постройте прототип.   -  person Mike Sherrill 'Cat Recall'    schedule 28.10.2014
comment
Я упомянул запятую для двух мест: одно при шифровании значения, а другое для хранения в виде списка ссылок на внешний ключ - второе использование - просто избежать таблицы соединения. Я построил небольшой прототип, но это все, подозрительно, будет ли у него обратная сторона в более длительные сроки!   -  person cpandey05    schedule 28.10.2014