AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Statement speichern

Ein Thema von Graw · begonnen am 14. Aug 2023 · letzter Beitrag vom 15. Aug 2023
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.630 Beiträge
 
Delphi 12 Athens
 
#1

AW: SQL Statement speichern

  Alt 14. Aug 2023, 10:52
Das stimmt natürlich, aber ein SQL-Statement als Klartext in einer Datei zu speichern, ist an Risiko kaum zu übertreffen.
Wenn jemand böses Zugriff auf das System hat und die Datei zu manipulieren kann, dann ist man eh schon aufgeschmissen. Gegenüber der aktuell verwendeten Registry ist das kein großer Unterschied. Eine Ressource lässt sich da fast ebenso leicht durch eine bösartige Ressourcen-DLL (z.B. mit DE Extension) neben der EXE unterwandern. Den dafür eventuell eingerichteten Zugriffsschutz kann man dann ja auch für die INI-Datei einrichten, dann sind beide Verfahren gleich (un-)sicher.

Bei SQL-Injection geht es aber gar nicht um die Manipulierung der SQL-Anweisung an sich, sondern um die Verfälschung durch bösartige Eingaben, ob die nun vom User am lokalen Rechner, einer importierten Datei oder über die Eingabe auf einer Webseite kommen. Das Speichern der SQL-Anweisung in einer INI-Datei öffnet also mitnichten einer SQL-Injection Tür und Tor. Das ist nur von der SQL-Anweisung selbst abhängig - der Speicherort hat damit überhaupt nichts zu tun.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL Statement speichern

  Alt 14. Aug 2023, 11:45
Unsere App benutzt zwar intensiv DBs, aber ich habe direkt recht selten mit SQL zu tun. Interessehalber die Frage: wieso sollte man SQL Statements in der Registry oder in einer Ini speichern? Ich kenne das halt so, dass diese in den DB-Komponenten direkt gespeichert ist oder der SQL-Code mittels Delphi-Code zuusammengebaut wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.630 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL Statement speichern

  Alt 14. Aug 2023, 13:20
Ich kenne das halt so, dass diese in den DB-Komponenten direkt gespeichert ist oder der SQL-Code mittels Delphi-Code zuusammengebaut wird.
Das ist ein sehr verbreiteter und durchaus valider Ansatz. Damit wird auch der Live-Zugriff zur Designzeit ein Kinderspiel. Solange keine anwenderspezifischen SQL-Besonderheiten berücksichtigt werden sollen, ist das auch mein persönlich präferierter Ansatz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.368 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: SQL Statement speichern

  Alt 14. Aug 2023, 14:26
Unsere App benutzt zwar intensiv DBs, aber ich habe direkt recht selten mit SQL zu tun. Interessehalber die Frage: wieso sollte man SQL Statements in der Registry oder in einer Ini speichern? Ich kenne das halt so, dass diese in den DB-Komponenten direkt gespeichert ist oder der SQL-Code mittels Delphi-Code zuusammengebaut wird.
Bei kleinen Anwendungen oder wenigen SQL-Statements innerhalb der Anwendung geht das noch. Aber irgendwann fängt man an, für jede "abweichende" Abfrage ein neues TQuery ins DataModule zu packen. Ich habe schon DataModule gesehen, auf denen soviele Queries drauf waren, dass niemand mehr wusste, wo was drin steht. Durch die große Menge stehen die dann manchmal schon außerhalb des Canvas.
Dazu kommt, dass diese Statements im DFM stehen. Versuche mal nach Schlüsselbegriffen im Statement zu suchen. Innerhalb von Delphi geht das gar nicht (@Uwe: Ich kenne da zumindest nichts) und wenn man "von außen" sucht, findet man oft die Begriffe nicht, weil im DFM mittendrin umgebrochen wird.

Manche Statements müssen tatsächlich im Source zusammengebaut werden, aber die meisten sind relativ statisch, wenn man weiß, wie man mit SQL umgeht und müssen nur gut parametrisiert werden. Es gibt auch genügend Möglichkeiten solche Sachen in der Datenbank abzulegen (Stored Procedures, User Defined Functions, Views, etc.). Eine Ablage in INI-, SQL-Dateien oder in der Registry halte ich (ist meine ganz persönlich Ansicht!) für unprofessionell.

Wie weiter oben schon geschrieben, lege ich die Statements als Ressource oder in einer Datenbank ab.

Den Vorteil des Live-Zugriffs zur Designzeit, wie Uwe Raabe geschrieben hat, kann man trotzdem erhalten und sogar noch optimieren. Man nimmt dafür einfach ein SQL-Statement für die DB-Komponente, welches zur Laufzeit nie aufgerufen wird. Mit einer passenden Where-Bedingung erhält man 0 Datensätze, dafür aber alle notwendigen Felder ohne große Laufzeit der SQL-Abfrage.
Zur Laufzeit werden dann die "echten" Statements geladen.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQL Statement speichern

  Alt 14. Aug 2023, 17:11
weil im DFM mittendrin umgebrochen wird.
und das seit knapp 30 Jahren auch noch extrem kurz. (bei länger wäre es unwahrscheinlicher, dass die geringere Masse an Umbrüchen stört, falls es überhaupt noch welche gibt, die man nicht selbst gemacht hat)


const LineLength = 64; und BytesPerLine = 32;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Aug 2023 um 17:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
695 Beiträge
 
FreePascal / Lazarus
 
#6

AW: SQL Statement speichern

  Alt 15. Aug 2023, 06:54
Ich für meinen teil speicher die SQLs direkt in der Datenbank ab, weil ich auf dem Weg extrem gut customizen kann.

Wenn ein Kunden in der Auswahlmaske andere Felder sehen will, die auch noch extra aus anderen Tabellen per
join geholt werden müssen, die beim anderen Kunden evtl gar nicht existieren, kann das grid da für die auswahl
einfach den dafür passend benannten sql aus der sql tabelle holen und dann eben anzeigen was da gewünscht ist.
Bei Verfügbarkeit (wie in firebird) könnten das dann auch gleich views oder SPs sein. Und aus der Exe heraus
könnte der Default sql selbst in die Datenbank geschrieben werden, wenn da noch keine angepasste Version
zu finden ist.

Bei bedarf können dann die gleichen Grids sogar userbezogen andere sqls aus der datenbank holen so das ein
Mitarbeiter in der Produktion bei der Auftragsübersicht ganz andere Daten sieht als einer in der Buchhaltung.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#7

AW: SQL Statement speichern

  Alt 15. Aug 2023, 08:36
Noch ein Vorteil dieses Vorgehens:

Wird die Datenbank gewechselt oder müssen unterschiedliche Datenbanksysteme unterstützt werden, so kann, durch "einfachen" Austausch der SQLs in der Datenbank, die Software an die unterschiedlichen Besonderheiten der SQL-Syntax der diversen Datenbanksysteme angepasst werden, wie da z. B. wären: Top 100 <-> First 100 <-> Limit 100 <-> RowNum <= 100, ...

Das Programm selbst muss dafür nicht modifiziert bzw. in jeweils angepassten Versionen vorgehalten und gepflegt werden.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: SQL Statement speichern

  Alt 15. Aug 2023, 20:25
Hallo,
ich als Entwickler der App bin der Chef über sämtliche SQL-Queries,

nix wird zwischengespeichert!

SQL-Fehler
App V2 wird geladen, nutzt "optimierte" Query.

Punkt!
Heiko
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.117 Beiträge
 
Delphi 2009 Professional
 
#9

AW: SQL Statement speichern

  Alt 15. Aug 2023, 20:53
Unsere App benutzt zwar intensiv DBs, aber ich habe direkt recht selten mit SQL zu tun. Interessehalber die Frage: wieso sollte man SQL Statements in der Registry oder in einer Ini speichern? Ich kenne das halt so, dass diese in den DB-Komponenten direkt gespeichert ist oder der SQL-Code mittels Delphi-Code zuusammengebaut wird.
Bei kleinen Anwendungen oder wenigen SQL-Statements innerhalb der Anwendung geht das noch. Aber irgendwann fängt man an, für jede "abweichende" Abfrage ein neues TQuery ins DataModule zu packen. Ich habe schon DataModule gesehen, auf denen soviele Queries drauf waren, dass niemand mehr wusste, wo was drin steht.
Steinigt mich, aber ich in meinen Projekten gibt es nicht eine TQuery zur Entwurfszeit. Allerdings gibt es auch keine DB-Komponenten.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.630 Beiträge
 
Delphi 12 Athens
 
#10

AW: SQL Statement speichern

  Alt 15. Aug 2023, 22:11
Steinigt mich, aber ich in meinen Projekten gibt es nicht eine TQuery zur Entwurfszeit. Allerdings gibt es auch keine DB-Komponenten.
Warum steinigen? Das ist ein ebenso valider Ansatz wie der mit DB-Komponenten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz