Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst SQL Select Blob

Mitglied: Kaffeepause

Kaffeepause (Level 1) - Jetzt verbinden

01.02.2010 um 15:48 Uhr, 16307 Aufrufe, 13 Kommentare

Wir haben eine Datenbank-Tabelle mit BLOBs. In diesen sind Dokumente (wie PDF) gespeichert. Für bestimmte Zugriffe sollen diese Dokumente verschlüsselt werden. Wir haben eine Verschlüsselung im Einsatz, nur muss ich prüfen, ob tatsächlich alle Dokumente entsprechend verfremdet wurden. Daher möchte ich gerne eine SQL-Abfrage starten, die mir anzeigt, ob eventuell noch unverfremdete Dokumente in der Tabelle vorliegen.

Hallo mal wieder,

wie gesagt:
- eine Tabelle mit BLOBs (Microsoft SQL Server 2005 auf Microsoft Windows Server 2003)
- in den Feldern PDFs, DOCs, XLS, HTML

Dateien haben ja bestimmte Dateiheader (PDF-Dateien beginnen immer mit "%pdf"), daher würde ich gerne die Tabelle nach diesen Dateiheadern durchsuchen.

Wie würde eine solche Abfrage aussehen? Kann ich nach diesem Dateiheader (wie "%pdf") suchen?
Oder kann ich nach dem entsprechenden HEX-Wert dieses Dateiheaders suchen (2550)?

Anbei Bild eines BLOBs/PDF.

1ebdf86c4167b3bbb874a894a573f24d - Klicke auf das Bild, um es zu vergrößern

Viele Grüße an alle anderen IT-Crowds,

Kaffeepause
Mitglied: Biber
01.02.2010 um 17:08 Uhr
Moin Kaffeepause,

eine undankbare Aufgabe hast du dir da aufhalsen lassen... macht (vergleichsweise) viel Aufwand mit einen vermuteten Nutzen von nahezu 0.
Denn die Erwartungshaltung ist ja sicherlich "Ja, es hat sich bestätigt, dass alle PDF-Dokumente zumindest nicht mehr mit jedem PDF-Reader einfach angezeigt werden können".

Also. der MSSQL-Server bringt keine dokumentierte native Funktion mit, um on-the-fly BLOB-Felder "lesbar" anzuzeigen, z.B wie in einem Hex-viewer bzw. in deinem Bildchen oben.

Gute Nachricht: so ein "BLOB-Reader" ist z.B. als Stored Procedure eben mal schnell zusammengeharkt.
Ein ganz nettes (ruhig angegangenes) Beispiel in 4 Akten findest du z.B im Database Journal als Storing Images and BLOB files in SQL Server Part 1-4 von Don Schlichting.

Aber ich würde überprüfen, ob nicht ein Anklicken einzelner Datensätze, also eine mehr oder weniger oberflächliche Stichproben-Ansicht ausreichen könnte.
Denn das dankt dir keiner, wenn du da eine Woche Arbeitszeit verbrätst.... und zu einem akzeptablen Preis verkaufen kannst du deine Erfahrungen auch eher nicht.

Grüße
Biber
Bitte warten ..
Mitglied: Kaffeepause
01.02.2010 um 17:23 Uhr
Hallo und danke für die schnelle Antwort,

nee, Stichprobe ist leider nicht, denn das hab ich schon gemacht. Sind tatsächlich sehr sensible Daten, und es soll sichergestellt sein, dass ALLE Dokumente entfernt/verfremdet wurden. Daher dachte ich eben an eine solche Abfrage nach den Dateiheadern. Wenn ich eine solche Abfrage starten könnte (Zeige mir alle Datensätze die mit Dateiheader PDF, DOC, XLS, MSG, HTML anfangen) und dabei 0 Datensätze rauskäme, dann wäre das eine gute Überprüfung. Vor allem wenn ich diese Abfrage vorher auf der unveränderten Originaldatenbank absetzen würde und mir tatsächlich die Anzahl der Dokumente in unserer Datenbank angezeigt würde (hier würde ja ein Select Count ausreichen).

Kann ich überhaupt die Funktion SELECT in Verbindung mit BLOB verwenden?
Hat BLOB die Funktion SELECT?
Wenn ja, wie arbeitet MSSQL mit BLOBs, sprich in welchem Format?
"Liest" MSSQL die Felder tatsächlich binär? Oder Hex? Oder Reintext?

Bin leider kein Datenbankadmin...

Happy Robanukah,
Kaffeepause
Bitte warten ..
Mitglied: Biber
01.02.2010 um 17:55 Uhr
Moin Kaffeepause,

ich weiß jetzt nicht, wie ich dir die Worte "der MSSQL-Server bringt keine dokumentierte native Funktion mit, um on-the-fly BLOB-Felder "lesbar" anzuzeigen" schonend und volksnah näherbringen kann...

Hast du mal den Link oben aufgerufen?

Die Hoffnung mit "Select Count() from whatever where irgendneSkalareFunktion(Blobfeld) operator 'bla%' " kannst du jedenfalls begraben AFIAK.

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
01.02.2010 um 23:33 Uhr
Moin,

das mit dem select sehe ich anders als Biber. Mit einem
01.
select * from Tabelle where Blob like '%PDF%'
kannst Du Dir eigentlich die Daten anzeigen lassen, die die Zeichenfolge 'PDF' enthalten. Das Blob (varbinary (max)) wird dann nämlich in varchar umgewandelt und durchsucht. Generell kann man sich also die zu suchende Hexfolge in varchar umwandeln, ebenso die varbinary-Spalte und dann mit like danach suchen.

Problem ist allerdings, daß in Hexfolgen sich dann auch Joker für die Suche mit like einschleichen können, wie z.B. das erste Zeichen im PDF-Header, 0x25 = %. Mit folgender kleiner Routine läßt sich aber auch das bewerkstelligen:
01.
declare @SuchHex varbinary (500), @SuchText varchar (500)
02.

03.
-- hier die zu suchende Hexfolge eintragen
04.
select @SuchHex = 0x25504446
05.

06.
-- Ersetzung fuer Platzhalter
07.
select @SuchText = convert (varchar (500), replace (replace (replace (replace (replace (
08.
		@SuchHex, '[', '[[]'), '%', '[%]'), '^', '[^]'), '_', '[_]'), '-', '[-]'))
09.

10.
select @SuchText = @SuchText + '%'	-- Suche am Anfang vom Text
11.
--select @SuchText = '%' + @SuchText + '%'	-- Suche ueberall im Text
12.
--select @SuchText = '%' + @SuchText	-- Suche am Ende vom Text
13.

14.
select <Spalte>, convert (varchar (max), <Spalte>) from <Tabelle> where convert (varchar (max), <Spalte>) like @SuchText
Einfach oben die zu suchende Hexfolge eintragen und am Ende <Tabelle> und <Spalte> ersetzen. Falls nicht am Anfang, sondern überall oder am Ende gesucht werden soll, die entsprechende Zeile aktiv schalten und fertig.

Gruß, Mad Max
Bitte warten ..
Mitglied: Kaffeepause
02.02.2010 um 09:56 Uhr
Hallo,

erstmal danke an beide für die Antworten!

mit
01.
select * from Tabelle where Blob like '%PDF%'
erhalte ich
01.
Der Argumentdatentyp varchar ist für das 2-Argument der like-Funktion ungültig.
Die Syntax der Abfrage wird allerdings von MSSQL problemlos anerkannt.

mit
01.
select * from Tabelle where Blob like 0x2550
erhalte ich keine Fehlermeldung, allerdings auch keinen einzigen Treffer, was mich verwundert, denn nach der Joker-Erklärung habe ich eher mit zu vielen Ergebnissen gerechnet.

Mit der Routine erhalte ich eine Fehlermeldung
01.
Meldung 529, Ebene 16, Status 2, Zeile 14
02.
Die explizite Konvertierung des image-Datentyps in varchar(max) ist nicht zulässig.
Ich hab das Gefühl, dass das alles schon kurz vorm Ziel ist, deswegen würde ich mich sehr freuen, wenn sich die letzten Fehlermeldungen auch noch irgendwie beheben ließen.

Muss auch derweil mal schauen, was Google so zu den Fehlermeldungen sagt.

Viele Grüße,
Kaffeepause
Bitte warten ..
Mitglied: MadMax
02.02.2010 um 10:26 Uhr
Moin Kaffepause,

Ihr verwendet einen veralteten Datentyp, image. Der funktioniert zwar noch, ist aber im Prinzip abgelöst durch den Datentyp varbinary (max). Deswegen funktioniert auch die implizite Konvertierung beim einfachen select nicht. Dann muß man halt den Datentyp image erstmal in varbinary (max) konvertieren und dann erst in varchar (max). In der Suchroutine lautet die letzte Zeile dann also:
01.
select <Spalte>, convert (varchar (max), convert (varbinary (max), <Spalte>)) from <Tabelle> where convert (varchar (max), convert (varbinary (max), <Spalte>)) like @SuchText
Gruß, Mad Max
Bitte warten ..
Mitglied: Kaffeepause
02.02.2010 um 12:47 Uhr
Geil.

Einfach nur geil.

Ich bin im "normalen" Umgang mit MS schon bewandert (MCSE), aber im Bezug auf Datenbanken leider sehr wenig. Allein hätte ich das nie hingekriegt (ich kann den Code mit Mühe lesen und verstehen).

Vielen Dank!
Vielen, vielen Dank!
Bitte warten ..
Mitglied: Biber
02.02.2010 um 16:16 Uhr
Moin Mad Max,

auch von mir vielen Dank... hab wieder was dazugelernt.
Die Convert( VarBinary (max), blobfeld) -Möglichkeit kannte ich noch nicht.

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
02.02.2010 um 20:20 Uhr
Aber gerne doch. Und es freut mich, daß ich sogar Dir noch was Neues erzählen konnte, Biber

Gruß, Mad Max
Bitte warten ..
Mitglied: Kaffeepause
04.02.2010 um 14:25 Uhr
Mist, eine Frage hab ich doch noch...
Tut mir Leid, falls diese Frage irgendwie dämlich sein sollte.

Ich möchte nach allen Datensätzen suchen, die weder Dateiheader1, noch Deateiheader2 entsprechen.
Das "weder" ist an sich leicht, da ich einfach ein "not like @SuchText" verwende.
Bei der Verknüpfung der beiden Konditionen tu ich mir grad schwer.

Folgendes habe ich erfolglos ausprobiert
  • select konvertiertes feld from tabelle where konvertiertes feld not like suchbegriff1 and where konvertiertes feld not like suchbegriff2
  • select konvertiertes fel d from tabell e where (konvertiertes fel d not like suchbegriff 1) and (where konvertiertes fel d not like suchbegriff 2)
  • select konvertiertes fel d from tabell e where konvertiertes fel d not like suchbegriff 1 and not like suchbegriff 2
  • select konvertiertes fel d from tabell e where konvertiertes fel d not like suchbegriff 1 nor suchbegriff2//

Kurzum, ich eiere hier grad ziemlich rum...

Anbei der letzte Versuch.

01.
declare @SuchHex1 varbinary (500), @SuchText1 varchar (500), @SuchHex2 varbinary (500), @SuchText2 varchar (500)
02.

03.
select @SuchHex1 = 0x00000000 -- Dateiheader1
04.
select @SuchText1 = convert (varchar (500), replace (replace (replace (replace (replace (
05.
		@SuchHex1, '[', '[[]'), '%', '[%]'), '^', '[^]'), '_', '[_]'), '-', '[-]'))
06.
select @SuchText1 = @SuchText1 + '%'
07.

08.
select @SuchHex2 = 0xAAAAAA -- Dateiheader2
09.
select @SuchText2 = convert (varchar (500), replace (replace (replace (replace (replace (
10.
		@SuchHex2, '[', '[[]'), '%', '[%]'), '^', '[^]'), '_', '[_]'), '-', '[-]'))
11.
select @SuchText2 = @SuchText2 + '%'
12.

13.
select convert (varchar (max), convert (varbinary (max), TABELLE)) 
14.
from tabelle.SPALTE 
15.
where (convert (varchar (max), convert (varbinary (max), TABELLE)) not like @SuchText1) 
16.
and
17.
where (convert (varchar (max), convert (varbinary (max), TABELLE)) not like @SuchText2)
Viele Grüße,
die Kaffeepause
Bitte warten ..
Mitglied: Biber
04.02.2010 um 16:28 Uhr
Moin Kaffeepause,

ich weiß nicht ganz genau, aus welchem kontext du diesen Code kopiert hast, aber...

?? Ist da nicht ein bisschen zu häufig das Schlüsselwort "select" drin?

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
04.02.2010 um 21:56 Uhr
Witzig, Du hast anscheinend wirklich nur die richtige Möglichkeit ausgelassen: das "where" in der letzten Zeile muß weg, also "... and (convert (varchar ..."

@Biber
Den Code hat er überwiegend von mir da oben kopiert. Und ich habe mir für normale Zuweisungen an Variablen auch select statt set angewöhnt. Funktionieren aber genauso

Gruß, Mad Max
Bitte warten ..
Mitglied: Kaffeepause
05.02.2010 um 12:01 Uhr
So, jetzt aber fertig.

Vielen Dank!

Das WHERE war das Problem.
Jetzt kann ich schön mehrere Suchbegriffe verknüpfen.

Das ist ganz toll geworden.
So, wie ich es hier brauche.

Viele Grüße und nochmals vielen Dank,
die Kaffeepause
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Select column by id ORALCE SQL
gelöst Frage von 94451Datenbanken2 Kommentare

Hallo Liebe Leut, gibt es die Möglichkeit eine Column anhand einer ID zu selekiteren? wenn ich einen Abruf mache ...

Datenbanken
IF Abfrage im SELECT Oracle SQL
gelöst Frage von 94451Datenbanken2 Kommentare

Hallo , ist es möglich im SELECT eine IF-Abfrage machen (bin auch offen für eine andere Lösung). >SELECT ID, ...

Datenbanken

SQL Statement - Select TOP x - Variables Filterkriterium

Frage von Blu3Scr33nDatenbanken3 Kommentare

Hallo liebe Administratoren, ich baue mir grade eine kleine Access-DB zusammen und bin dabei auf ein Problem gestoßen: Ich ...

Datenbanken

Transact-SQL - Diff. aus mehreren Select-Abfragen berechnen

gelöst Frage von CreamyCewieDatenbanken1 Kommentar

Hallöchen. Ich habe ein Problem mit (T)SQL und komme nicht weiter. Ich habe eine Tabelle ('Belegp') in der u.A. ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 2 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 2 TagenSicherheit1 Kommentar

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 3 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 4 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
Hyper-V
Hyper-V Manager startet, jedoch keine VM
Frage von NaleorHyper-V14 Kommentare

Hallo zusammen, auf meinem Windows 10 (Build 1703) Notebook von der Arbeit scheint Hyper-V plötzliche nicht mehr zu funktionieren. ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS13 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows 10
Windows 10 PC kein Ping möglich von anderen PCs
Frage von babylon05Windows 108 Kommentare

Hallo, ich habe 2 neue PC's in einer Windows 2008 Domän. Diese haben Windows 10. Die anderen PC's sind ...