22,207
社区成员
发帖
与我相关
我的任务
分享
那个ddl触发器,能记录时间,但是不够详细,不能记录ip地址等信息
背景:Windows server 2008服务器上的数据库总是每隔一阵子就整个库被删除。今天做了个触发器,当数据库发生create跟drop时,记录下时间跟EventData数据。但是现在想查找今天早上是谁删除了数据库? 问题:怎么查找当天是谁删了数据库?哪个用户哪个IP哪个计算机?
CREATE TABLE [dbo].[logtable](
[session_id] [int] NULL,
[UserName] Nvarchar(100) ,
[connect_time] [datetime] NOT NULL,
[client_net_address] [varchar](48) NULL,
[client_tcp_port] [int] NULL,
[cmd] [nvarchar](max) NULL,
[insertTime] [datetime] default(getdate()) NULL --日志记录插入时间
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
IF EXISTS (SELECT * FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR DROP_DATABASE
AS
insert into [dbo].[logtable]([session_id],[UserName], [connect_time] ,[client_net_address],
[client_tcp_port],[cmd] )
SELECT session_id,SUSER_NAME(), connect_time,client_net_address, client_tcp_port
, EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') msg
FROM sys.dm_exec_connections
where session_id=@@SPID
GO
--DROP TRIGGER ddl_trig_database
--ON ALL SERVER;
--GO
可以在触发器中添加获取用户信息的代码,试试我上面的!
本地测试能获取到