Найти того кто удалил данные из БД MS SQL оказалось не таку уж и сложно, сначала смотрим вообще были ли операции по удалению из нашей таблицы:
SELECT
[Transaction ID],
Operation,
Context,
AllocUnitName
FROM
fn_dblog(NULL, NULL)
WHERE
Operation = 'LOP_DELETE_ROWS'
Ищем таблицу в столбце AllocUnitName, смотрим номер транзакции, вычленяем SID:
SELECT
[Transaction SID]
FROM
fn_dblog(NULL, NULL)
WHERE
[Transaction ID] = @TranID
AND
[Operation] = 'LOP_BEGIN_XACT'
По сиду вычленяем юзера:
SELECT
*
FROM
sysusers
WHERE
[sid] = @SID
Единый рабочий скрипт:
DECLARE @TableName sysname
SET @TableName = 'dbo.VPX_IP_ADDRESS'
SELECT
u.[name] AS UserName
, l.[Begin Time] AS TransactionStartTime
FROM
fn_dblog(NULL, NULL) l
INNER JOIN
(
SELECT
[Transaction ID]
FROM
fn_dblog(NULL, NULL)
WHERE
AllocUnitName LIKE @TableName + '%'
AND
Operation = 'LOP_DELETE_ROWS'
) deletes
ON deletes.[Transaction ID] = l.[Transaction ID]
INNER JOIN
sysusers u
ON u.[sid] = l.[Transaction SID]