.net 更新每个表中的每个列
我的数据库最近被SQL注入攻击,在数据库中所有表的所有列中的所有数据中留下标记。是否有一种在所有表上运行.net 更新每个表中的每个列,.net,sql-server-2005,tsql,sql-injection,.net,Sql Server 2005,Tsql,Sql Injection,我的数据库最近被SQL注入攻击,在数据库中所有表的所有列中的所有数据中留下标记。是否有一种在所有表上运行REPLACEUPDATE的快速方法?比如: UPDATE [all tables] SET [all columns]=REPLACE([all columns], '<script>....</script>', '') UPDATE[all tables]SET[all columns]=REPLACE([all columns],“…..”,“”) 一种方法是
REPLACE
UPDATE
的快速方法?比如:
UPDATE [all tables] SET [all columns]=REPLACE([all columns], '<script>....</script>', '')
UPDATE[all tables]SET[all columns]=REPLACE([all columns],“…..”,“”)
一种方法是浏览元数据。数据库中的sys.tables
表可以为您提供所有表的列表:
select *
from sys.tables
然后可以使用sys.columns
表来获取这些表中的列。然后,您需要生成SQL以在循环中进行更新,例如
请在此处查看有关在SQL Server 2005中查询数据库架构的一般信息:否,SQL Server中没有允许您直接执行此操作的内容 然而,间接地——有一种方法:您可以检查系统目录视图并枚举所有列——还可以将这些列限制为(N)个VARCHAR/(N)个CHAR列——并且您可以让您的第一个T-SQL语句从这些系统目录视图生成一个UPDATE语句列表 有了这个T-SQL语句列表,您就可以运行实际的命令来清理数据库——这将涉及数据库中所有表中所有面向字符的列
SELECT
'UPDATE ' + sch.name + '.' + t.name + ' SET ' + c.name + ' = REPLACE("<script>....</script>", "")'
FROM
sys.columns c
INNER JOIN
sys.tables t ON c.object_id = t.object_id
INNER JOIN
sys.schemas sch ON t.schema_id = sch.schema_id
WHERE
t.is_ms_shipped = 0
AND c.user_type_id IN (167, 175, 231, 239)
您可以在sys.types
目录视图中找到所有已定义的系统类型-在本示例中,我刚刚获取了char
、nchar
、varchar
和nvarchar
的值
UPDATE dbo.T_ServicePSSAAudit SET RunType = REPLACE(RunType, '<script>....</script>', '')
UPDATE dbo.T_PromoStatus SET StatusText = REPLACE(StatusText, '<script>....</script>', '')
UPDATE dbo.T_PromoStatus SET StatusCode = REPLACE(StatusCode, '<script>....</script>', '')
UPDATE dbo.T_DSLSpeed SET CaptionCode = REPLACE(CaptionCode, '<script>....</script>', '')
UPDATE dbo.T_DVPTransfer SET RequestType = REPLACE(RequestType, '<script>....</script>', '')
UPDATE dbo.T_Promo SET Description = REPLACE(Description, '<script>....</script>', '')