我正在使用Web应用程序在SQL Server表中插入,更新和删除记录。当从GUI发生任何插入,更新,删除时,将在另一个表中捕获对此表的审计。
插入,更新正在正确捕获用户名,但是从GUi删除捕获SQL帐户而不是删除记录的Web用户名。
请提出解决方案。
删除的触发器代码如下:
-- DELETE
if exists (select 1 from deleted) and not exists (select 1 from inserted)
BEGIN
DECLARE @id varbinary(85)
DECLARE @who varchar(50)
SELECT @id = [Transaction SID]
FROM fn_dblog(NULL, NULL)
WHERE [Operation] = 'LOP_BEGIN_XACT'
AND [Transaction ID] = (SELECT TOP 1 [Transaction ID]
FROM fn_dblog(NULL, NULL)
WHERE Operation = 'LOP_DELETE_ROWS'
AND AllocUnitName like 'dbo.sampletable%'
ORDER BY [Transaction ID] DESC)
SET @who = SUSER_SNAME(@id)
INSERT sampletableAudit
SELECT
'D' as Operation, Id, Type, @who, getdate()
FROM
deleted
END
答案 0 :(得分:0)
在活动计算机上,此查询将永久进行。谁知道在查询事务日志的时候,该查询会发生什么。在我的机器上(有一个繁忙的数据库),这已经运行了7分钟,没有结果,所以我停止了它。
如果您正在运行SQL Server 2008,那么使用SQL Server Audit可以获得相同的结果(影响更小,更少)。否则为什么不能只使用user_name?