AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ReadOnly = True und Benutzer kann trotzdem löschen
Thema durchsuchen
Ansicht
Themen-Optionen

ReadOnly = True und Benutzer kann trotzdem löschen

Ein Thema von Der schöne Günther · begonnen am 30. Jan 2017 · letzter Beitrag vom 30. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 12:49
Datenbank: ALS • Version: 11 • Zugriff über: FireDAC
Die Doku zu UpdateOptions spricht:
Zitat:
To guarantee that users cannot modify the dataset data, set ReadOnly to True. The property is the shortcut for the EnableDelete, EnableInsert, or EnableUpdate properties.
Leider scheint das nicht die Wahrheit zu sein denn ich sage sowohl auf meiner TFDConnection als auch auf einer TFDTable : UpdateOptions.ReadOnly := True; .

Später führt er aber ein connection.ExecSQL('DELETE FROM myDatabase WHERE stuff.id = :id', [someId]); fröhlich aus und löscht den Datensatz aus der Tabelle. Das finde ich ehrlich gesagt schon ein bisschen sehr harsch.


Ist das ein Bug oder findet jemand einen kreativen Weg wie man das als "as designed" abstempeln könnte?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 12:57
Das sind ja zwei Paar Schuhe. Die Einstellung betrifft die Daten im Dataset, was du machst ist eine SQL Anweisung ausführen.

Dass die vorher entsprechend der Einstellung kategorisiert wird, hätte ich jetzt auch nicht erwartet. Denn schließlich löst du die ja selber aus.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#3

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:00
Das ReadOnly bezieht sich nicht auf die Datenbank sondern nur auf das DataSet von TFDTable. FDTable.Edit oder FDTable.Delete werden dann nicht funktionieren.

Wenn du aber den Delete-Befehl direkt zur Datenbank schickst, gelten nur die Rechte, die der User auf dem DB-Server selbst hat.

In der Doku steht es auch so drin: To guarantee that users cannot modify the dataset data
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:02
Da wirst du wohl in der Datenbank an der Tabelle die Roles/Permissions/... entsprechend einrichten müssen, so dass der eingeloggte User keine Berechtigungen für UPDATE und DELETE besitzt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:03
Warum kann ich diese Einstellungen dann überhaupt an einer TFDConnection vornehmen? Hätte ich das direkt auf einer Tabelle gemacht, sehe ich das ja ein. Aber so?

Ich hätte den jetzt schon für so schlau gehalten dass er z.B. ein SQL-Select-Statement durchlässt, bei etwas wie DELETE aber abblockt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:09
Warum kann ich diese Einstellungen dann überhaupt an einer TFDConnection vornehmen?
Man kann die DataSets einzeln auf ReadOnly setzen
oder man setzt das global für alle DataSets, in der Connection.

Diese ReadOnly setzen das DataSet auf ReadOnly und damit auch die angehängteh DBControls (Edits/Grids), die sich dann garnicht erst "editieren" lassen (vor dem POST).
Ein DB-seitiger Schreibschutzt wird erst beim POST bemerkt, falls die DB-Query-Componenten das nicht vorher mitbekommen und beim Laden der Daten das ReadOnly der TField aktivieren.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Jan 2017 um 13:14 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:41
Warum kann ich diese Einstellungen dann überhaupt an einer TFDConnection vornehmen? Hätte ich das direkt auf einer Tabelle gemacht, sehe ich das ja ein. Aber so?

Ich hätte den jetzt schon für so schlau gehalten dass er z.B. ein SQL-Select-Statement durchlässt, bei etwas wie DELETE aber abblockt.
Du verwendest da 2 unterschiedliche API, die verschieden mächtig (und wenig intelligent) sind.
Die Readonly Attribute der Komponenten sind sicher wasserdicht (in ihrer Welt).
Aber das SQL Statement, geht uninterpretiert (von der Connection Componente) einfach durch an die sql engine. Die SQL Engine kümmern die Delphi Settings gar nicht. Kennt sie ja auch nicht.
Und die Delphi Connection kümmert der SQL Befehl nicht, den müsste sie ja quasi parsen um eine Verletzung der Readonly attribute festzustellen. Ich schätze, es gibt keine SQL Komponente, die sich so wichtig nimmt.
Gruß, Jo
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:46
Alles klar.

Dass es so ist verstehe ich, ich hätte halt erwartet dass FireDAC in der Mitte den String nicht einfach 1:1 durchschießt sondern das ReadOnly sich noch einmal ansieht und selbst schon abblockt.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:50
[...]sondern das ReadOnly sich noch einmal ansieht und selbst schon abblockt.
Das kannst Du client-seitig nicht zuverlässig umsetzen. Einen Datensatz könntest Du z.B. auch durch das Ausführen einer Stored-Procedure löschen. Oder meinetwegen auch in einem Trigger: Tabelle A wird aktualisiert und löscht in Tabelle B einen Datensatz.
Die Kontrolle über das, was im DataSet passiert, ist das einzige, was client-seitig sichergestellt werden kann und auch wird.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: ReadOnly = True und Benutzer kann trotzdem löschen

  Alt 30. Jan 2017, 13:52
Vielleicht noch etwas Licht an die Sache werfen:
Wenn Dein Delete Statement als Delete-SQL in den Dataset Properties eingetragen wäre (und nicht per COnnection.EXECSQL rausgejagt würde), dann wäre ich mit meiner Erwartung an die Readonly Property der Dataset Komponente voll auf Deiner Seite. Die wäre dann schlampig implementiert.

Aber so.. ein hintenrum SQL Befehl.. keine Chance..
Gruß, Jo
  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 18:33 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