SQL中批量刪除被注入的惡意代碼的方法
下文將為您介紹SQL中批量刪除被注入的惡意代碼的方法,供您參考,如果您也遇到了這樣的問題,不妨一看,相信對(duì)您會(huì)有所幫助。
1,如果你的數(shù)據(jù)表很少的話,那么寫幾條簡單的sql就搞定了
對(duì)于表中的nvchar類型的字段:
以下為引用的內(nèi)容:
update news set title=replace(title,'【惡意代碼】','')
對(duì)于表中的text類型的字段:
以下為引用的內(nèi)容:
update news set content=Replace(Cast(content as varchar(8000)),'【惡意代碼】','')
2,如果你是sql2000的話,可以用下面這個(gè)。
以下為引用的內(nèi)容:
DECLARE @fieldtype sysname
SET @fieldtype='varchar'
--刪除處理
DECLARE hCForEach CURSOR GLOBAL
FOR
SELECT N'update '+QUOTENAME(o.name)
+N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''【惡意代碼】'','''')'
FROM sysobjects o,syscolumns c,systypes t
WHERE o.id=c.id
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND t.name=@fieldtype
EXEC sp_MSforeach_Worker @command1=N'?' #p#
(這個(gè)是我網(wǎng)上搜索的,據(jù)說sql2000下可以,但我沒試過,在sql2005下無法執(zhí)行。)
3,sql2005下我選擇的方法是先生成清理代碼的語句,然后把運(yùn)行結(jié)果復(fù)制到查詢分析器里執(zhí)行之,當(dāng)然在sql2000下一樣可以用。
以下為引用的內(nèi)容:
select
'update ['+s.name + '] set ['+c.name+']=' +'replace(['+c.name+'],''【惡意代碼】'','''')'
from sysobjects s,syscolumns c,systypes t
where s.type='u' and s.id=c.id
AND OBJECTPROPERTY(s.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND t.name IN('varchar','nvarchar','char','nchar')
union
select
'update ['+s.name + '] set ['+c.name+']=' +'replace(Cast(['+c.name+'] as varchar(8000)),''【惡意代碼】'','''')'
from sysobjects s,syscolumns c,systypes t
where s.type='u' and s.id=c.id
AND OBJECTPROPERTY(s.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND t.name IN('text','ntext')
ps:以上是buzhizhe在處理問題時(shí)候整理的,方法1、2是網(wǎng)上搜索的,對(duì)于我的sql2005無用,因此寫了方法3,以便幫助不懂安全的菜鳥臨時(shí)解決問題。