RegEx zum prüfen von SQL Statements

Hallo,

gibt es irgendwo fertige RegEx Ausdrücke um SQL Statements zu prüfen ?

Hintergrund:

Benutzer kann über den GUI SQL Statement frei definieren und dann gegen die Datenbank schicken (MySQL und Programm in Java). Bevor es an der DB knallt würde ich gerne das SQL prüfen ob es syntaktisch in Ordnung ist.

Danke
Albert

Hi,
was soll denn da knallen?
Der Query-Optimizer der DB wird schon melden wenn was nicht in Ordnung war.

Gruss
Joey

Hallo Albert,

gibt es irgendwo fertige RegEx Ausdrücke um SQL Statements zu
prüfen ?

Nein, Du müsstest einen Parser schreiben, um die Korrektheit von SQL-Statements zu prüfen. Damit erfindest Du aber das Rad nochmal, weil solch ein Parser in MySQL schon drin ist.

Benutzer kann über den GUI SQL Statement frei definieren und
dann gegen die Datenbank schicken

Das ist die schlechteste Idee, die Du haben kannst. Einem Benutzer darfst Du nie erlauben, SQL-Statements selbst zu formulieren, das musst Du selbst nach gründlicher Prüfung der Eingabe tun.
Sieh dir mal den Begriff „SQL-Injection“ an
http://de.wikipedia.org/wiki/SQL-Injection
Bei dir brauchen User nicht mal die URL zu manipulieren, sondern können ihre Befehle a la

DELETE QUICK FROM artikel

gleich direkt absetzen, die dann auch als syntaktisch korrekt akzeptiert werden.

Erster Merksatz eines jeden Datenbankadministrators:
Jeder User, der was eingibt, ist ein potentieller Verbrecher :wink: und sollte erstmal durch mindestens fünf Sicherheitsschleusen.
Bei deinem Vorhaben macht er einen kleinen Schritt und steht schon mitten im Datentresor…

Viele Grüße
Marvin

Zum bereits Gesagten:

Benutzer kann über den GUI SQL Statement frei definieren und
dann gegen die Datenbank schicken (MySQL und Programm in
Java).

nicht immer ist gesagt, daß jemand, der die Tabellenstruktur kennt, auch über die semantische Definition der enthaltenen Daten Bescheid weiß. Daraus ergibt sich, daß Userabfragen zwar syntaktisch korrekt sind, die Ergebnismenge aber nicht korrekt ist, weil der User nicht die richtigen Filter oder Verknüpfungen gesetzt hat. Das, was zunächst für den Entwickler wie eine gute Sache zur Arbeitsvermeidung ausschaut, artet schnell in einen Haufen Mehrarbeit aus, weil Du ständig erklären mußt, warum dieses oder jenes fehlt oder zuviel ist.

Besser ist es, sich selbst gründlich Gedanken über das Datenmodell zu machen und dem Anwender eine definierte Schnittstelle liefern, über die er alle Daten bekommt, die er braucht - und zwar garantiert korrekt und dann auch supported.

Gruß

Sancho