Showing posts with label mssql. Show all posts
Showing posts with label mssql. Show all posts

Friday, March 23, 2007

Аудит изменения данных в таблицах

Аудит изменения данных в таблицах

Встала задача производить аудит изменения данных в таблицах.
Было необходимо сохранить:
  • Название таблицы
  • Столбец
  • Старое значение в таблице
  • Новое значение в таблице
  • Название столбца, являющего Primary Key
  • Значение столбца, являющего Primary Key
  • ID пользователя, внесшего изменения

Первое, что пришло в голову - это написать триггер, который бы
этим занимался.
Все оказалось не столь тривиально, как на первый взгляд.

Перво наперво задача была поделена на подзадачи.
  1. Как получить имя изменяемой таблицы.
  2. Как получить изменяемый столбец.
  3. Как получить старое значение.
  4. Как получить новой значение.
  5. Как узнать primary key этой таблицы.
  6. Как узнать значение primary key этой таблицы.
  7. Как передать ID пользователя.

Поспрашивав на форумах и почитав документацию ответы были найдены:

  1. Триггер создается на каждую таблицу, имя известно заранее.
  2. Воспользоваться update(), COLUMNS_UPDATED ( )
  3. Использовать таблицы inseted, updated
  4. Аналогично 3.
  5. SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    SELECT * FROM sys.objects WHERE type = 'pk'
  6. Аналогично пункту 3

Остался открытым вопрос - как передать ID пользователя в триггер.
Можно использовать что-то вроде tmp view, но я в этом не уверен.
В обще - процесс написания запущен, посмотрим, что из этого выйдет.

Если кто-то что-то знает по этой теме и может помочь - милости просим в comments.