![]() |
Datenbank: ALS • Version: 11 • Zugriff über: FireDAC
ReadOnly = True und Benutzer kann trotzdem löschen
Die
![]() Zitat:
Delphi-Quellcode:
als auch auf einer
TFDConnection
Delphi-Quellcode:
:
TFDTable
Delphi-Quellcode:
.
UpdateOptions.ReadOnly := True;
Später führt er aber ein
Delphi-Quellcode:
fröhlich aus und löscht den Datensatz aus der Tabelle. Das finde ich ehrlich gesagt schon ein bisschen sehr harsch.
connection.ExecSQL('DELETE FROM myDatabase WHERE stuff.id = :id', [someId]);
Ist das ein Bug oder findet jemand einen kreativen Weg wie man das als "as designed" abstempeln könnte? |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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. |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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 |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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.
|
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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. |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
Zitat:
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. |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
Zitat:
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. |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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. :? |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
Zitat:
Die Kontrolle über das, was im DataSet passiert, ist das einzige, was client-seitig sichergestellt werden kann und auch wird. |
AW: ReadOnly = True und Benutzer kann trotzdem löschen
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.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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