用于审核的登录触发器

时间:2016-11-11 14:35:38

标签: sql-server sql-server-2008 tsql sql-server-2008-r2

使用SQL Server 2008R2

我正在使用LOGON触发器来捕获已登录的用户。我已经创建了一个触发器,但它正在捕获SQL代理帐户并且像疯了一样插入它。我想将它从列表中排除,但我不知道如何修改触发器来实现它。不同的尝试将我锁定,我不得不使用DAC来放弃触发器。

原始代码:

USE B_DBA;
GO

CREATE TRIGGER LogonTrigger ON ALL SERVER FOR LOGON
AS 
BEGIN
    IF SUSER_SNAME() <> 'sa'
    INSERT INTO B_DBA.dbo.LogonAudit (UserName, LogonDate, spid) 
            VALUES (SUSER_SNAME(), GETDATE(), @@SPID)
END;
GO
ENABLE TRIGGER LogonTrigger ON ALL SERVER;

我想添加的内容基本上是一个where子句,但是我无法成功添加它,并且它不适用于IF部分。

Where not in (Select service_account from sys.dm_server_services)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

未经测试,但似乎您应该能够修改您的IF语句以检查sys.dm_server_services

USE B_DBA;
GO

CREATE TRIGGER LogonTrigger ON ALL SERVER FOR LOGON
AS 
BEGIN
    IF SUSER_SNAME() <> 'sa'
    AND NOT EXISTS (SELECT service_account FROM sys.dm_server_services WHERE service_account = SUSER_SNAME())
    INSERT INTO B_DBA.dbo.LogonAudit (UserName, LogonDate, spid) 
            VALUES (SUSER_SNAME(), GETDATE(), @@SPID)
END;
GO
ENABLE TRIGGER LogonTrigger ON ALL SERVER;