sql - 检查谁在 MS SQL Server 的表中执行了插入

标签 sql sql-server

我想检查哪个用户在 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/

相关文章:

sql - 如何解决选择框中的 N + 1 问题?

sql - 如何使用 regexp_substr 拆分 oracle 中的单词?

java - 优化从大表中获取数据

c# - 论坛的 LINQ 查询

mysql - SQL 连接结果

sql - 获得准确的百分比计算

sql-server - 如何查询SQL Server数据库恢复需要多长时间?

sql - 如何将十六进制数据字符串转换为字符串 db2 sql

sql-server - 使用 SSIS 将 SQL Server 表/ View 以 Parquet/CSV/JSON 格式加载到 Azure Data Lake。灵活的文件目标任务不断抛出错误

mysql - 需要一个查询根据另一个表的值对一个表中的值进行排序