![在整个数据库中进行字符串搜索和替换](https://linux22.com/image/598092/%E5%9C%A8%E6%95%B4%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E8%BF%9B%E8%A1%8C%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%90%9C%E7%B4%A2%E5%92%8C%E6%9B%BF%E6%8D%A2.png)
在 ASP.NET 网站上发生漏洞后,客户端会收到一串特定的恶意软件代码,这些代码会散布在整个数据库、多个表的多个列中。附加的字符串是一致的,不会因表而异,因此从理论上讲,如果我可以在整个数据库中进行搜索和替换,那么只需一次操作就可以清除它。
我可以在 PostgreSQL 或 MySQL 中相当轻松地完成此操作,如下所示:
mysqldump bad_db | sed 's/evilcode//g' | mysql fixed_db
但是如何使用 SQLServer 来实现这样的功能呢?我不确定在 Windows 下是否真的如此简单。
答案1
您将遇到的问题是数据库备份文件是二进制文件,而不是像 MySQL 转储那样的纯文本。以下是关联我之前写的一篇博客文章将清理 varchar 和 nvarchar 字段。它没有针对 text 和 ntext 的代码,但这可能会清理大部分内容。Text 和 Ntext 更难,因为您不能对它们使用诸如子字符串之类的东西。