我想检查哪个用户在 MS SQL Server 2008 的特定表中执行了插入操作。我知道存储了一些日志信息,但我不知道如何访问它。如果我能提供有关我的问题的具体信息,以及如果我还需要其他信息,可以在哪里寻找以及寻找什么的一般指示,我将不胜感激。
谢谢!
最佳答案
你是说从事务日志中检索这个吗?
这并不理想,因为您无法保证相关行在事件日志中仍然可用,并且查询效率较低,但类似下面的内容可以做到(返回 USER_NAME()
而不是可能更有用的 SUSER_NAME()
。
将 dbo.X
更改为您的实际表名。
DECLARE @allocation_unit_ids TABLE (
allocation_unit_id BIGINT PRIMARY KEY )
INSERT INTO @allocation_unit_ids
SELECT allocation_unit_id
FROM sys.allocation_units au
JOIN sys.partitions p
ON au.container_id = CASE
WHEN au.type IN ( 1, 3 ) THEN p.hobt_id
WHEN au.type = 2 THEN p.partition_id
END
WHERE p.object_id = OBJECT_ID('dbo.X');
WITH L1
AS (SELECT [Transaction ID],
[Begin Time],
[End Time],
[Transaction SID],
CASE
WHEN Operation = 'LOP_INSERT_ROWS'
AND AllocUnitId IN (SELECT allocation_unit_id
FROM @allocation_unit_ids) THEN 1
END AS I
FROM sys.fn_dblog(NULL, NULL) l),
L2([Transaction ID], TransactionBegin, TransactionEnd, sid)
AS (SELECT [Transaction ID],
MAX([Begin Time]),
MAX([End Time]),
MAX([Transaction SID])
FROM L1
GROUP BY [Transaction ID]
HAVING 1 = MAX(I))
SELECT TransactionBegin,
TransactionEnd,
p.name AS PrincipalName
FROM L2
JOIN sys.database_principals p
ON p.sid = L2.sid
关于sql - 检查谁在 MS SQL Server 的表中执行了插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491928/