使用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)
任何帮助都将不胜感激。
答案 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;