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
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:
oder alle Spalten mit PHP:
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:
Irgendwie in der Art könnte es gehen.
Zusammenbauen musst du dir das selber.
Gruß
lorf
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 vonIrgendwie in der Art könnte es gehen.
Zusammenbauen musst du dir das selber.
Gruß
lorf

