Змінити захоплення даних - як знати, хто вніс зміни?


10

Відстеження того, хто вніс зміни, визначені CDC.

По лінії моєї хакерської дати, я спробував той же підхід, додавши suser_sname як нове поле зі значенням за замовчуванням у таблиці треків зміни компакт-дисків. Але це, здається, повертає власника процесу cdc, а не користувача, який ініціював зміни в базовій таблиці. Я також спробував original_login, але це повертає логін облікового запису служби sql. Знову, ймовірно, пов'язано з процесом cdc, а не з користувачем, який ініціював зміни.

Я знайшов подібне запитання щодо переповнення стека, але без відповіді, окрім відстеження змін із переднього кінця або через тригер, який, здається, перешкоджає використанню cdc. Я б не репостував, але, оскільки оригінал був у stackoverflow, я подумав, що спробую спробувати тут, особливо якщо R2 або 2012 запропонували кращий шлях.

Отже, коротше: як я можу знати, хто змінив захоплення даних про зміни?

Відповіді:


7

Я подав помилку з цього приводу, але це було закрито як "за задумом".

http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc

На жаль, вам доведеться використовувати іншу техніку (наприклад, аудит SQL або тригер), щоб отримати цю інформацію (і якийсь спеціальний код, щоб спробувати співвіднести її з даними CDC наскільки це можливо). Про цей недолік я писав також у моїй главі "Аудит SQL Server, відстеження змін та захоплення даних" у книзі " Глибокі занурення SQL Server MVP" (том 1).

Вибачте, що я не маю кращого вирішення для вас, але вбудовані можливості CDC просто не відповідають вашим вимогам. :-(


@RThomas ви все одно можете голосувати за позиції, навіть якщо вони закриті - вони переглядаються періодично. Ще корисніше, ніж голосування, - додати коментар із зазначенням подробиць про необхідність бізнесу, що зробить цю інформацію корисною, включаючи, можливо, вартість реконструкції речей, щоб обійти відсутню функціональність. Я трохи написав про те, як якісні дані можуть переважити кількісні дані ...
Аарон Бертран

Добре знати, я думав, що закритий означає також закритий для голосування. Я зазначив у своєму коментарі, що Oracle пропонує це у своїй реалізації CDC. Це виглядає логічно. docs.oracle.com/cd/A91202_01/901_doc/server.901/a90237/…
RThomas

6

Ви можете додати стовпчик і мати тригер на столі, щоб заповнити користувача на вставці / оновлення / видалення, а CDD зберігатиме це. Ви можете захопити ім'я користувача або з інтерфейсу користувача, передавши ім’я користувача, використовуючи інформацію про контекст, або з фактичної сесії

SET @CapturedBy = CAST(REPLACE(CAST(CONTEXT_INFO() AS VARCHAR(10)),CHAR(0),'''''''') AS INT)

IF(@CapturedBy) IS NULL
    BEGIN
       SELECT @CapturedBy = P.[Code]
       FROM sys.dm_exec_sessions AS S
         INNER JOIN [dbo].[Person] AS P
          ON S.[login_name] = P.[User_Name]
       WHERE S.[session_id] = @@spid
    END

0

Чи можете ви додати поле "UpdateBy" в головну таблицю, встановити його за замовчуванням на SUSER_NAME () або ORIGINAL_LOGIN () і чи будуть ці дані заповнені CDC? Я вірю, що це дасть вам ту саму інформацію, яку ви шукаєте.


Це дає вам лише обліковий запис svc / власника cdc, ви можете зауважити, що я спробував ці речі і задокументував результати в оригінальному запитанні ще в лютому
RThomas

Ваш коментар сказав, що ви додали його до таблиці ChangeData. Я говорю про оригінальну таблицю, на якій заснована таблиця ChangeData. Однак я зрозумів, що після публікації це буде працювати лише для вставок
шеф-кухар

Ааааааа, не схопив цього. Я розумію, що ти зараз кажеш.
RThomas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.