AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TQuery.open führt DDL-/DML-Anweisung aus
Thema durchsuchen
Ansicht
Themen-Optionen

TQuery.open führt DDL-/DML-Anweisung aus

Ein Thema von thlicht · begonnen am 12. Jul 2006 · letzter Beitrag vom 19. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
thlicht

Registriert seit: 9. Jun 2006
6 Beiträge
 
#1

TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 21:47
Datenbank: Oracle XE • Zugriff über: BDE
Hallo zusammen,

mein erster Beitrag und ein wirklicher Hammer. Ich habe eine Anwendung (D5 Enterprise), die auf eine Oracle-XE-DB zugreift und aus einer Textdatei eine Query lädt und diese mit Open öffnet. Also ein einfaches Tool, um flexibel Auswertungen zu erstellen.

Wenn meine Textdatei nun Datenmanipluationen (DML) oder gar Datendefinitionen (DDL) enthält, werden diese auf dem Server ausgeführt, bevor Delhi mir in einer Fehlermeldung mitteilt, dass es keinen Cursor erzeugen konnte. Nicht gerade lustig, wenn in der Textdatei so was wie "drop table ..." steht. Die Auswertungen sollen vom Admin meines Kunden selbst erstellt werden, und so mancher Bastler könnte da auf dumme Ideen kommen.

Auch der Versuch, DB.Readonly:=true zu setzen, bringt keine Änderung.

Wie schaffe ich es, Änderungen an der Datenbank zu unterdrücken?

Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 21:50
-Benutzerrechte beschränken (kein GRANT)
-Abfragen vorher parsen
Markus Kinzler
  Mit Zitat antworten Zitat
thlicht

Registriert seit: 9. Jun 2006
6 Beiträge
 
#3

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 22:05
Das grundsätzlich Beschränken der Rechte ist nur schwer möglich, da die angemeldeten User an anderer Stelle natürlich Datenänderungen vornehmen dürfen. Ich hatte auch schon überlegt, das Abfragemodul unter einem besodneren User-Account laufen zu lassen und diesem die Rechte zu beschneiden. Ist aber etwas wenig elegant.

Parsen ist auch möglich, nur sind es eben doch eine ganze Menge Begriffe die auszufiltern sind. Wenn man das richtig macht, müsste man sogar den Context bewerten. Ich denke, wenn es keinen besseren Weg gibt, werde ich wohl diesen wählen.

Ich hatte aber gehofft, dass die BDE irgendwie eine Klassifikation des Befehls (z.B. beim Prepare) vornehmen kann (wäre dort natürlich auch sowas wie parsen) und mir diese stupide Arbeit abnimmt. Schaun wir mal ...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 22:20
Ein TQuery kennt zwar die Eigenschaft .Prepare, ich versteh aber nicht ganz wie dir das bei deinem Problem helfen soll. Prepare überträgt zwar die Abfrage, bereitet sie vor und führt sie nicht gleich aus, aber wenn der Anwender "Drop ..." eingibt wird sie trotzdem ausgeführt.

BTW. Warum nimmst du die BDE für Oracle ?
Markus Kinzler
  Mit Zitat antworten Zitat
thlicht

Registriert seit: 9. Jun 2006
6 Beiträge
 
#5

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 22:39
Ja, mit dem PREPARE das war nur eine Idee in der Hoffung, jemand nimmt mir die Arbeit einer Analyse der SQL-Anweisung ab. Der Vorschlag war nciht wirklich qualifiziert, gebe ich gerne zu. I

BDE nehme ich aus historischen Gründen. Die ersten Zeilen der Anwendung sind vor ca 10 Jahren entstanden. Bete von Windows-Version zu Version, dass die BDE noch läuft. Kennst Du eine Alternative, die eine wirklich fette Applikation mit vielen Querys und StoredProc mit vertretbarem Aufwand von BDE migrieren läßt (und vielleicht noch mein eigentliches aktuelles Problem lösen kann)?
Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 22:47
Alle auf TDataSet basierenden Komponenten funktionieren ähnlich wie die BDE. Aber natürlich hast du immer einen Migrationsaufwand. Aber der Einsatz der BDE schränkt die Fähigkeiten neuer DBMS stark ein. Schon deswegen sollte man nach Alternativen Ausschau halten. Wie z.B. OCI, ZEOS, AnyDAC, ODAC, ADO, ...
Markus Kinzler
  Mit Zitat antworten Zitat
thlicht

Registriert seit: 9. Jun 2006
6 Beiträge
 
#7

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 12. Jul 2006, 22:54
Ok, ich sehe, dass ich da wohl mit BDE nicht weiterkommen. Werde mir bei Gelegeheit mal die Alternative ansehen.
Dank dir für die schnelle Hilfe. Werde den Case schließen.

Gute nacht
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 13. Jul 2006, 07:26
Der Vorschlag von mkinzler ist schon der richtige: Du solltest den "normalen" Usern auf der DB kein DDL-Rechte geben. Eintrag/Löschen von Datensätzen sind wieder andere Rechte (DML) die du unabhängig davon einstellen kannst.

Wie schaut denn eine Textdatei aus? Ich vermute du kannst den Vorschlag mit alternativen Komponenten um dieses Problem zu lösen vergessen da du vermutlich ein gewaltiges Sicherheitloch im Bezug auf SQL-Injection besitzt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 13. Jul 2006, 07:51
Meine Vorschlag zum Kompo-Wechsel war auch unabhängig von diesem Problem zu verstehen, da sie es ja auch nicht lösen können, sondern auf Grund der Tatsache das mit der BDE ein Großteil der Fähigkeiten von Oracle halt nicht zur Verfügung stehen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
795 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TQuery.open führt DDL-/DML-Anweisung aus

  Alt 13. Jul 2006, 11:51
Warum legst du nicht ein Schema auf deiner Oracle-Datenbank an, in dem ausschließlich Views angelegt werden (vom Admin oder anderen berechtigten Personen) und läßt in deiner Applikation nur den Select auf diese Views zu?

Ggf. mit einem kleinen Dialog zur Übergabe von Parametern.

Grüße
mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz