SQL Querys in Konfigurationsdatei

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
marlob
User
Beiträge: 51
Registriert: Mittwoch 23. August 2006, 20:13

Hallo,
habe ein Programm geschrieben, wo ich aus verschiedenen
Datenquellen (Excel, dbase, csv usw.) Daten in eine SQLite-Datenbank ablege
Diese Daten sollen später aus der Datenbank wieder ausgelesen werden um
daraus mit Hilfe von Cheetah verschiedene Dokumente zu generieren.
Jetzt möchte ich dem Nutzer die Möglichkeit geben, die SELECT-Statements
in eine Konfigurationsdatei zu schreiben (später soll eine GUI folgen,
ich möchte aber erst ein funktionierendes Programm haben).
Meine Frage ist nun, wie ich diese Abfragen am besten gestalte?
Soll ich einfach rohe SQL Querys (Gefahr von Injections) zulassen
oder gibt es Module die das besser können?
Wäre nett, wenn ich ein paar Hinweise bekommen würde.

Danke
marlob
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Also damit ich noch keine Lücke gefunden, bin mir aber natürlich nicht sicher ;)

Code: Alles auswählen

if not sql.lower().strip().startswith('select'):
    return '<b>Error:</b> Only "Select" permitted.'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ist das ganze eine lokale Applikation oder eine Multi-User basierte? Bei ersterem wäre es ja ziemlich wurscht, da der Nutzer dort eh seine DB komplett einsehen oder schrotten kann, wenn er das denn will.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

ice2k3 hat geschrieben:Also damit ich noch keine Lücke gefunden, bin mir aber natürlich nicht sicher ;)

Code: Alles auswählen

if not sql.lower().strip().startswith('select'):
    return '<b>Error:</b> Only "Select" permitted.'

Code: Alles auswählen

select foo
from bar
where bla;
drop table bar
;-)

Wobei natürlich in der Doku steht:
Doku hat geschrieben: execute() will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a Warning.
Insofern sollte das wohl doch scheitern...

Dennoch hätte ich Bauchschmerzen dabei, wenn ich dem User komplett freie Hand lass bei der Gestaltung der Queries.

Von der Handhabung der Ergebnisse mal ganz zu schweigen...
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Hyperion hat geschrieben:Wobei natürlich in der Doku steht:
Doku hat geschrieben: execute() will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a Warning.
Insofern sollte das wohl doch scheitern...
Jap, das funktioniert nicht. Das hab ich selbstverständlich getestet ;)
Hyperion hat geschrieben:Von der Handhabung der Ergebnisse mal ganz zu schweigen...
Geht problemlos in eine HTML-Tabelle ;-) Und mehr soll das auch nicht machen, ist nur zum Debuggen und auch nicht öffentlich erreichbar. Nur falls mal jemand zufällig darauf stößt, sollte er halt nicht gleich die ganze DB schrotten können...
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Man kann doch bei einer Datenbank nur bestimmten usern Rechte zum Lesen geben, oder?
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dav1d hat geschrieben:Man kann doch bei einer Datenbank nur bestimmten usern Rechte zum Lesen geben, oder?
Nicht zwangsläufig. SQLite hat kein User-Management - ist auch nicht wirklich sinnvoll beim Einsatzgebiet von File basierten DRMS.

Zudem nützt das ja auch noch nicht so viel, wenn man keine Authentifizierung in der Applikation hat...
marlob
User
Beiträge: 51
Registriert: Mittwoch 23. August 2006, 20:13

Hyperion hat geschrieben:Ist das ganze eine lokale Applikation oder eine Multi-User basierte? Bei ersterem wäre es ja ziemlich wurscht, da der Nutzer dort eh seine DB komplett einsehen oder schrotten kann, wenn er das denn will.
Das ganze ist fürs erste eine lokale Applikation.
Später sollen dann mehrere User zugreifen sollen.
Bei typischen Projekten bei uns, aber höchstens 2 oder 3 User.
Ich denke, das wird mit SQLite noch zu handeln sein.
Antworten