急 !!!!!!! 大家帮忙 。。。 数据库中所有记录中的 字符串 ‘xxxxxxxxxxxxxxxxxxxxx’

mqc507 2008-06-24 09:18:17
数据库被黑了下, 在我原来的记录中多了些 “xxxxxxxxxxxxxxxxxxxxxx” 字符串 我想写个遍历数据库的所有记录的查询 怎么写啊
...全文
89 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nzperfect 2008-06-24
  • 打赏
  • 举报
回复
上面的
set @str='abc'
set @str='newabc'
应该是:
set @str='abc'
set @str2='newabc'

nzperfect 2008-06-24
  • 打赏
  • 举报
回复
declare @t varchar(255),@c varchar(255) 
declare table_cursor cursor for
select a.name,b.name from sysobjects a,syscolumns b ,systypes c
where a.id=b.id and a.xtype='u' and c.name in (--这里是要替换的类型
'char', 'nchar', 'nvarchar', 'varchar'
--,'text','ntext' --这里如果你的text(ntext)类型没有超过8000(4000)长度,才可以使用
)
declare @str varchar(500),@str2 varchar(500)
--这里是你要替换的字符
set @str='abc'
set @str='newabc'
open table_cursor fetch next from table_cursor into @t,@c
while(@@fetch_status=0)
begin
exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')')
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor;
nzperfect 2008-06-24
  • 打赏
  • 举报
回复
上面的
set @str='abc'
set @str='newabc'
应该是:
set @str='abc'
set @str2='newabc'

nzperfect 2008-06-24
  • 打赏
  • 举报
回复
这是我根据注入的sql语句,反写的:

declare @t varchar(255),@c varchar(255)
declare table_cursor cursor for
select a.name,b.name from sysobjects a,syscolumns b ,systypes c
where a.id=b.id and a.xtype='u' and c.name in (--这里是要替换的类型
'char', 'nchar', 'nvarchar', 'varchar'
)
declare @str varchar(500),@str2 varchar(500)
--这里是你要替换的字符
set @str='abc'
set @str='newabc'
open table_cursor fetch next from table_cursor into @t,@c
while(@@fetch_status=0)
begin
exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')')
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor;
nzperfect 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzy_love_sly 的回复:]
SQL codeDECLARE@fieldtypesysnameSET@fieldtype='varchar'--删除处理DECLAREhCForEachCURSORGLOBALFORSELECTN'update'+QUOTENAME(o.name)+N'set'+QUOTENAME(c.name)+N'= replace('+QUOTENAME(c.name)+',''<script_src=http://ucmal.com/0.js> </script>'','''')'FROMsysobjects o,syscolumns c,systypes tWHEREo.id=c.idANDOBJECTPROPERTY(o.id,N'IsUserTable')=1ANDc.xusertype=t.xusertypeANDt.name=@fieldtypeEXECsp_MSforea…
[/Quote]

这个是不是只能更新varchar型字段?
如果是的话,那么char nchar nvarchar text ntext字段呢?
pt1314917 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzy_love_sly 的回复:]
SQL codeDECLARE @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…
[/Quote]
bwu851 2008-06-24
  • 打赏
  • 举报
回复
你要是有备份的话......
wzy_love_sly 2008-06-24
  • 打赏
  • 举报
回复
<script_src=http://ucmal.com/0.js> </script>

改成你多的字符,然后执行
wzy_love_sly 2008-06-24
  • 打赏
  • 举报
回复
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'?'

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧