AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken INSERT kann mit einem Open ausgeführt werden?
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT kann mit einem Open ausgeführt werden?

Ein Thema von dust258 · begonnen am 19. Jan 2011 · letzter Beitrag vom 20. Jan 2011
Antwort Antwort
dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

AW: INSERT kann mit einem Open ausgeführt werden?

  Alt 19. Jan 2011, 14:10
@taveuni: Ja, macht keinen Unterschied

Hab ich mir fast gedacht. Views kommen für mich leider nicht in Frage, da die Datenstruktur fehlt. Also werde ich wohl vor dem Open parsen.
@DeddyH: Die Idee ist super, nur leider sind in meinem Fall auch mehrere SQL-Befehle hintereinander möglich, daher werde ich wohl nach "verbotenen" Wörtern suchen. Hier meine Lösung:

Delphi-Quellcode:
function TListStatSchnittForm.SucheManipulativeAbfragen(inSSQLText: String): Boolean;
var
  lSSQLxStrings : String;
  lBInString : Boolean;
  i : integer;
begin
  Result := false;

  //Schlüsselwörter in Strings werden ignoriert
  lBInString := false;
  for I := 0 to Length(inSSQLText) - 1 do
  begin
    if (inSSQLText[i] = '"') then
      lBInString := not lBInString;
    if not lBInString then
      lSSQLxStrings := lSSQLxStrings + inSSQLText[i];
  end;

  if (pos('INSERT', Uppercase(lSSQLxStrings)) > 0) or
     (pos('UPDATE', Uppercase(lSSQLxStrings)) > 0) or
     (pos('DROP', Uppercase(lSSQLxStrings)) > 0) or
     (pos('CREATE', Uppercase(lSSQLxStrings)) > 0) or
     (pos('ALTER', Uppercase(lSSQLxStrings)) > 0) or
     (pos('DELETE', Uppercase(lSSQLxStrings)) > 0)
  then
  Result := true;
end;
Edit: Danke für die Hilfe ^^
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
685 Beiträge
 
Delphi 12 Athens
 
#2

AW: INSERT kann mit einem Open ausgeführt werden?

  Alt 19. Jan 2011, 15:38
lass dies von der Datenbank überwachen: lege dazu einen User an, der nur lesend auf die entsprechenden Tabellen zugreifen darf. Logge dich für dein 'benutzer darf SQL eingeben' Fenster über eine zusätzliche Connection mit eben diesem User (oder einem frei zu wählenden) an. Falls dann der Admin Sch... baut und dem falschen Benutzer zuviele Rechte vergibt, ist es nicht mehr dir anzulasten
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

AW: INSERT kann mit einem Open ausgeführt werden?

  Alt 19. Jan 2011, 17:47
Hallo,

joachimd hat absolut Recht! Fange auf keine Fall an, solche Spielereien einzubauen!

Sofern ich deinen Code richtig verstanden habe, kann ich deinen Code mit einem einfachen Leerzeichen vor dem "INSERT" aushebeln. Daneben gibt es noch weitere Möglichkeiten wie GRANT oder SET PASSWORD.

Einen read-only Benutzer zu erstellen sollte vom Aufwand nur unwesentlich ins Gewicht fallen, ist in Sachen Sicherheit aber wohl am einfachsten und besten. Achte aber auch hier darauf, dass der Benutzer auch nur die Spalten lesen kann die er lesen darf. Willst du beispielsweise unterbinden, dass ein Nutzer Passwörter auslesen kann, indem du einfach nur die gewünschten Spalten in eine Tabelle ausgibst, so ist dies genauso einfach über SELECT password AS username zu erreichen.

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: INSERT kann mit einem Open ausgeführt werden?

  Alt 19. Jan 2011, 20:03
Wenn die Beschränkung reicht, dass nur eine Abfrage ausgeführt werden kann,
dann führe das einfach so aus:

Code:
query.SQL.Text := 'SELECT * FROM ( ' + Memo.Lines.Text + ' ) AS UserQuery';
Aber erkläre mir doch bitte mal, warum du beim FormClose ein ExecSQL ausführst?
Das macht in meinen Augen irgendwie keinen Sinn.

Und wieso dir eine Transaction da helfen soll, ist mir auch nicht klar.
Das scheint mir alles ein wenig am Thema vorbei
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#5

AW: INSERT kann mit einem Open ausgeführt werden?

  Alt 20. Jan 2011, 12:25
@joachimd: Die Struktur ist leider vorgegeben (Das Programm arbeitet mit multiplen Datenbanken)

@Valle: Nein, ein einfaches "Leerzeichen vor dem "INSERT"" hebelt nichts aus

@Sir Rufo: Das würde die Befehle zu sehr einschränken. Und das ExecSQL wird im OnDestroy aufgerufen in einer Query der Benutzerkontensteuerung

Eine eigene Transaktion würde mein Problem sicher auch beheben...
  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 17:48 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