请教真正的专家, 此问题比较深入, 字段被修改多种手段估测不到修改的 SQL语句, 求助

szrgzs 2015-10-30 11:20:23
数据库有个表叫 country 被人在国名后面追加了非法链接, 当然还有别的数据表也同样遭殃了,

用dbcc log(9,3) with tableresults

select * from fn_dblog(null,null)
调出事务日志, 但是因为是服务器是 SQL Server 2000, 日志档也经常截断, 导致不完整, 查不出有效信息

======================================================================
于是我写了个触发器
Create Table Country_mon_sql(
username varchar(60),
client_ip varchar(100),
sql_text varchar(4000),
program_nm varchar(300),
c_interface varchar(600),
login_name varchar(300),
loginTime DateTime,
acTime DateTime default getdate() primary key
);
GO

--DROP TRIGGER tri_capt_dml_sql
--GO

Create Trigger tri_capt_dml_sql ON Country
INSTEAD OF DELETE, INSERT, UPDATE
AS
Begin
Declare @stmt varchar(4000)
SELECT @stmt='' --EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')

insert into Country_mon_sql(username, client_ip, loginTime, program_nm, c_interface, [login_name], sql_text)
select user, [host_name], [login_time], [program_name], [client_interface_name], [login_name], @stmt
from Sys.dm_exec_Sessions where session_id=@@SPID

End;

GO

因为所有的更新都被强行替换了, 我自己测试 update或者 insert之类都会记录到数据表 Country_mon_sql中,
但是对方攻击时 country数据表不再被修改, 触发器也没有把内容记录到Country_mon_sql表中.

=======================================================
然后我使用 SQL Server Profiler工具对指定时段和这个被攻击的数据库进行全部追踪,
第二天, 还是找不到对方攻击 SQL,

请各位大神 , 师傅指点迷津

...全文
71 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
无涯大者 2015-10-30
这个要从源头找问题,建议可以先从程序的安全性 来入手检查,再者就是修改加密数据库的密码,提高安全保证数据的安全性!
回复
szrgzs 2015-10-30
前面的触发器程序发错了, SQL 2000不兼容 sys.dm_exec_sessions 早就换成了 Create Table Country_mon_sql( username varchar(60), hostname varchar(30), loginTime DateTime, spid int, login_name varchar(300), lastwaittype varchar(50), cmd varchar(50), sql_text varchar(4000), program_nm varchar(300), net_address varchar(50), acTime DateTime default getdate() primary key ); GO Create Trigger tri_capt_dml_sql ON Country INSTEAD OF DELETE, INSERT, UPDATE AS Begin insert into Country_mon_sql(username, hostname, loginTime, program_nm, spid, [login_name], lastwaittype, cmd, net_address) select user, [hostname], [login_time], [program_name], spid, [loginame], lastwaittype, cmd, net_address from [master].dbo.sysprocesses where spid=@@SPID End; GO
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-10-30 11:20
社区公告
暂无公告