最近、誰かが を使用して私たちのデータベースにハッキングしたsp_MSforeachtable
ため、複数行のクエリが正しい場合。
今私の質問は、私がどのように変更できるかですsys.sp_MSforeachtable
。彼は、@command1
および他のコマンドを使用してクエリを実行し、テーブルを削除しています。
XXXX=Censored db name
(Somehow also spaces in front of the USE)
USE XXXX;
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all";
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"
次に、私のSQLプロファイラが表示されます:
select @mscat = ltrim(str(convert(int, 0x0002)))
exec(N'declare hCForEachTable cursor global for select ''['' + REPLACE(schema_name(syso.schema_id), N'']'', N'']]'') + '']'' + ''.'' + ''['' + REPLACE(object_name(o.id), N'']'', N'']]'') + '']'' from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id '
+ N' where OBJECTPROPERTY(o.id, N''IsUserTable'') = 1 ' + N' and o.category & ' + @mscat + N' = 0 '
+ @whereand)
declare hCForEachTable cursor global for select '[' + REPLACE(schema_name(syso.schema_id), N']', N']]') + ']' + '.' + '[' + REPLACE(object_name(o.id), N']', N']]') + ']' from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id where OBJECTPROPERTY(o.id, N'IsUserTable') = 1 and o.category & 2 = 0
exec @retval = sys.sp_MSforeach_worker @command1, @replacechar, @command2, @command3, 0
create table #qtemp ( /* Temp command storage */
qnum int NOT NULL,
qchar nvarchar(2000) COLLATE database_default NULL
)
誰かがこれらのものを保護する方法を教えてもらえますか? SQL プロファイラーは、アプリケーション名が PHP5 であることを示しているので、おそらく登録ページまたはログイン パネル インジェクション..