【发布时间】:2015-02-26 14:59:49
【问题描述】:
我正在使用 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
【问题讨论】:
-
除非您使用网络用户名连接到 sql,否则您将无法在 sql 中获取它。这将返回与 sql 建立连接的用户的用户名。
-
令人困惑的部分是它正确地捕获了插入、更新用户(ad\XXXXX)。
标签: sql sql-server user-interface triggers