Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wo gemeinsame Daten speichern? (https://www.delphipraxis.net/136969-wo-gemeinsame-daten-speichern.html)

patti 11. Jul 2009 13:02


Wo gemeinsame Daten speichern?
 
Folgendes Problem: Ich möchte aus meinem Programm heraus Daten (Einstellungen, etc.) an einem zentralen Ort speichern, sodass alle Benutzer von Windows auf diese zugreifen können, diese also sowohl lesen als auch schreiben können. Dafür ist ja eigentlich das COMMON_APPDATA-Verzeichnis gedacht (unter Vista z.B. "C:\ProgramData\"), allerdings können bei mir unter Vista Nicht-Admins die Daten nur lesen, jedoch nicht überschreiben, was jedoch benötigt wird. Dieses Problem ist bekannt und es gibt auch schon einige Threads in der DP dazu, allerdings hilft mir das bisher nicht wirklich weiter.

Deswegen meine Frage: Ist es möglich, allen Benutzern (also auch den Nicht-Admins) innerhalb meines Programmes die Rechte zu geben, diese Dateien zu ändern?
Alternativ: Wo können die Daten noch sinnvoll abgespeichert werden, sodass garantiert wird, dass jeder Benutzer Schreibrechte hat?

Patti

Apollonius 11. Jul 2009 13:09

Re: Wo gemeinsame Daten speichern?
 
Vermutlich hat normalerweise nur der Ersteller der Datei vollen Zugriff. Es ist aber nicht schwer, das zu ändern. Mit der JWSCL ist es ein Kinderspiel.

patti 11. Jul 2009 13:15

Re: Wo gemeinsame Daten speichern?
 
Stimmt, der Ersteller hat vollen Zugriff auf die Dateien. Gibt es außer der JWSCL noch eine weitere Möglichkeiten (mit "Bordmitteln"), die Rechte zu setzen?
Oder doch einen alternativen Speicherort?

Patti

Apollonius 11. Jul 2009 13:43

Re: Wo gemeinsame Daten speichern?
 
Die JWSCL hext ja nicht - sie kapselt nur die Windows-Funktionen. Mit MSDN-Library durchsuchenSetFileSecurity kannst du direkt den Security Descriptor der Datei setzen. Du musst dir vorher nur einen geeigneten SD konstruieren.

jaenicke 11. Jul 2009 13:52

Re: Wo gemeinsame Daten speichern?
 
Naja, wenn das so ist, dass nur der Besitzer alles darf dort: wie wäre es denn, wenn du einfach mehrere Dateien benutzt? Dann könnte jeder Daten einstellen und seine eigenen Daten auch löschen. Wer fremde Daten löschen will, der bekommt in seiner Datei einfach ein Flag gespeichert, dass der Eintrag gelöscht / editiert werden soll. Bei der nächsten Anmeldung kann der Besitzer dann gefragt werden, ob er das übernehmen will.

Auf diese Weise können alle Daten von allen benutzt werden, aber niemand kann fremde Daten aus Versehen beschädigen.

Dezipaitor 12. Jul 2009 10:27

Re: Wo gemeinsame Daten speichern?
 
Naja, was du da schreibst ist ein Sicherheitsproblem. Wenn jeder die Datei manipulieren kann, ohne auf dein Programm zurückgreifen zu brauchen, dann kann man vllt auch Pufferüberläufe provozieren und damit möglicherweise untere einem fremden Benutzeraccount Code ausführen.
Letztendlich gibt es auch mehreren Benutzer an einem Rechner, d.h. diese Datei könnte von mehreren Benutzern gleichzeitig geöffnet werden, bzw. überschrieben werden. D.h. der letzte Benutzer und seine Änderung gewinnt und überschreibt ohne den ersten Benutzer zu informieren, alle Daten.

Wenn es eine Ressource geben soll, die von mehreren Benutzers bearbeitet werden darf, dann muss das immer über ein Interface gehen, was nicht nur die Eingabedaten verifizieren sondern auch mehrere Benutzer verwalten kann.

Ich rate daher dringend ab, eine Datei für mehrere Benutzer freizugeben. Das ist die Sicherheitslücke schlechthin, weil man nie ausschließen kann, dass das Programm doch einen Fehler hat.

patti 12. Jul 2009 13:17

Re: Wo gemeinsame Daten speichern?
 
Naja, es geht halt darum, dass der User meines Programmes (es geht speziell um den "MedienKatalog") festlegen können soll, ob alle Benutzer des Computers auf die gleiche "Datenbank" zugreifen, oder jeder seine eigene Datenbank verwendet. Meiner Meinung nach sollte der Sinn des COMMON_APPDATA-Verzeichnisses ja darin liegen, eben solche Dinge zu ermöglichen...

Danke trotzdem für die Anregungen, werde mir da vielleicht noch was passendes überlegen.

Patti


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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