Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

SQL Abfrage über alle Tabellen und Felder wenn Struktur nicht bekannt ist





Frage

Halllo, mein eWebseite ist per SQL Injection gehackt worden und nun hat sich ein Script in sehr viel Datenbankfelder eingetragen. Das Script habe ich leider nicht. Aber ich kenne einige der Werte die das Skript eingetragen hat. Nach diesen möchte ich nun über alle Tabellen suchen. Ohne jeweils eine Abfrage für alle Tabellen zu erstellen. Geht so etwas? So in der Art: suche in allen Tabellen der Datenbank meineDB ob bru2 darin vorkommt und liste mir die Ergebnisse auf Es handelt sich um einen MS SQL Server auf Win XP Server. Danke für eure Hilfe. Max

Antwort 1 von Marie

Na ist normal ganz einfach: verseuchte DB wegwerfen und durch letzte Sicherheistkopie ersetzen.

Gruß Marie

Antwort 2 von lorf55

Hallo,
ich habe auch mal dazu nachgesehen und bin der meinung, dass das prinzipiell geht, aber habe weder Zeit noch passende DB zum Probieren. Deshalb hier nur ein paar Anhaltspunkte.

Wie man mit ASP alle Tabellen auflistet
http://www.aspheute.com/artikel/20010511.htm
Das nun folgende Beispiel alltables_sql.asp zeigt, wie man sich alle Tabellen in einer SQL Server Datenbank auflisten lassen kann:

<%
strConnStr = "Provider=SQLOLEDB;Data Source=strangelove;Initial Catalog=Northwind;..."
strTableStmt = "select * from sysobjects where type='U'"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strTableStmt, strConnStr
While Not rs.EOF
  Response.Write rs.Fields("name").Value & "<br>" & vbCrlf
  rs.MoveNext
Wend

rs.Close
Set rs = Nothing
%>


oder alle Spalten mit PHP:

    $table="table1";
...
    $sql="SELECT * FROM ".$table."";
...
    $sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='$DB_NAME' AND table_name='".$table."'";


Aber eigentlich macht man sowas mit T-SQL als Skript. Dazu ein paar Beispiele hier:
Liste aller Tabellen in einer Datenbank
use datenbank
go
select * from information_schema.tables
go

Liste aller Spalten von allen Tabellen in einer Datenbank
use datenbank
go
select * from information_schema.columns
go

Liste aller Sichten in einer Datenbank
use datenbank
go
select * from information_schema.views
go

Weitere hilfe hier

Als Ausgangsvariante könnte man sowas hier nehmen:

DECLARE 	@vartblName nvarchar(50)

DECLARE tblName Cursor FOR
	SELECT	name 
	FROM	dbo.sysobjects
	WHERE   (name like 'MeineTabellen%') 
		
Open 	tblName
FETCH NEXT FROM tblName 
	INTO @vartblName

WHILE @@FETCH_STATUS = 0
BEGIN
	
Print @vartblName  
		If NOT EXISTS
		(Select * From Information_Schema.Columns Where Table_Name = @vartblName And Column_Name = 'ts')
		Begin
		exec('SELECT * FROM ' +  @vartblName + '  WHERE Spaltenname="bru2" ')

		END 

FETCH NEXT FROM tblName 
	INTO @vartblName

END
CLOSE tblName
DEALLOCATE tblName
von

Irgendwie in der Art könnte es gehen.
Zusammenbauen musst du dir das selber.

Gruß
lorf