Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie Einstellungen am sichersten speichern? (https://www.delphipraxis.net/85572-wie-einstellungen-am-sichersten-speichern.html)

Andreas L. 1. Feb 2007 16:46


Wie Einstellungen am sichersten speichern?
 
Hi,
ich stehe vor folgendem Problem: Ich möchte Einstellungen und benötigte Programmdateien abspeichern, und zwar so das sie kein eingeschränkter Benutzer editieren oder löschen kann. Welche Möglichkeiten habe ich?

Das Programme- / Windows- Verzeichnis (bitte schlagt mich nicht :???: ) ist das einzige was mir einfällt. Wohl gemerkt, die eingeschränkten User müssen die Daten lesen können. Wie wäre es, die Dateien vllt. mit exklusiven Schreibrechten zu öffnen? Wie geht das überhaupt? Wichtig ist außerdem noch das mein Programm-Schreibrechte auf die Dateien haben muss. Also wäre hier ein Dienst unterm Systemkonto nötig. Doch der kann wiederrum nicht mit den Benutzer interagieren, es sei denn man nimmt einen sicherheitskritischen (?), interaktiven Dienst.

Fällt jemandem eine weitere Möglichkeit ein? Oder gibt es vllt. eine Möglichkeit mit einem Dienst (nicht interaktiv) Messages an Fenster, Prozesse beenden, usw. unter den verschiednen Benutzerkonten zu realisieren?

Vielen Dank schonmal :-)

SirThornberry 1. Feb 2007 16:49

Re: Wie Einstellungen am sichersten speichern?
 
Du könntest einen Dienst schreiben welcher einen Server enthält auf TCP/IP Baisis. Mit diesem kommoniziert dann deine Anwendung. Und wie du bereits sagtest kann der Dienst ja die Datei dann exclusiv offen halten.

Andreas L. 1. Feb 2007 16:52

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von SirThornberry
Du könntest einen Dienst schreiben welcher einen Server enthält auf TCP/IP Baisis. Mit diesem kommoniziert dann deine Anwendung. Und wie du bereits sagtest kann der Dienst ja die Datei dann exclusiv offen halten.

Doch wie kann so ein Server geschrieben werden? Welche Techniken kann ich einsetzen? Was brauche ich dazu? Wäre dann auch möglich das der Server auf einen anderen Computer im Netzwerk liegt und der Client mit ihm übers LAN kommuniziert?

Ich habe Turbo Delphi Professional

Andidreas 1. Feb 2007 16:53

Re: Wie Einstellungen am sichersten speichern?
 
wenn du permanent ne datenbank zur verfügung hast, könntest du auch dort deine
einstellungen hinterlegen!

Andreas L. 1. Feb 2007 16:59

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von Andidreas
wenn du permanent ne datenbank zur verfügung hast, könntest du auch dort deine
einstellungen hinterlegen!

Leider nicht. Es ist eine Anwendung die überwiegend für Heimanwender entwickelt wird. Denen eine DB installieren zu lassen wäre nicht zumutbar.

Andidreas 1. Feb 2007 17:06

Re: Wie Einstellungen am sichersten speichern?
 
wie wäre es mit der registry oder einem verschlüsseltem ini file???

Andreas L. 1. Feb 2007 17:46

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von Andidreas
wie wäre es mit der registry oder einem verschlüsseltem ini file???

Ich muss gewaltige Datenmengen (Listen mit bis zu 1500 Einträgen) zusätzlich zu den Einstellungen speichern. Also ist da die Registry wohl zu uneffizient.

mkinzler 1. Feb 2007 18:54

Re: Wie Einstellungen am sichersten speichern?
 
Oder einer Datenbank

Pfoto 1. Feb 2007 19:37

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

[...]und zwar so das sie kein eingeschränkter Benutzer editieren oder löschen kann. Welche Möglichkeiten habe ich?
Wenn es sich um Dateien handelt, kann jeder der ins Programm-Verzeichnis
kommt und dort Rechte hat, diese auch löschen (selbst wenn du es nicht
innerhalb deines Programms erlaubst)


Ein embedded Datenbank wäre ja ohne Installation sofort lauffähig,
da würde der User i.d.R. nichts von merken.
Unnötig zu erwähnen, das der Aufwand ein wenig größer wäre,
als mit einer Ini-Datei...

Vielleicht können wir dir eher helfen, wenn du grob umschreibst,
welche Daten genau verwaltet werden müssen.

Denn wenn du die Listen-Einträge ebenfalls in einer DB abspeichern
könntest, wären sie ganz einfach den verschiedenen Usern zuzuordnen
(ID des Listen-Eintrags in einer separaten Referenz-Tabelle zusammen
mit der ID des Users anlegen)


Gruß
Pfoto

SirThornberry 1. Feb 2007 19:39

Re: Wie Einstellungen am sichersten speichern?
 
@pfoto: Nicht jeder kann die Dateien löschen vor allem nicht wenn diese exclusiv geöffnet sind.

Flare 1. Feb 2007 19:53

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von SirThornberry
@pfoto: Nicht jeder kann die Dateien löschen vor allem nicht wenn diese exclusiv geöffnet sind.

Aber die sind doch nur so lange exklusiv geöffnet wie das Programm offen ist, was die Datei geöffnet hat. Man kann ja auch einfach das Programm beenden und dann die Datei löschen...und selbst wenn sie exklusiv geöffnet ist, wozu gibts denn solche tollen Programme wie Unlocker :mrgreen:

Ich kann mir aber nicht vorstellen, dass die Dateien so stark geschützt werden müssen, das ssie niemand verändern und/oder löschen darf. Wenn es jemand doch macht, dann macht er sich doch damit selbst das Programm "kaputt" und fertig ist. Ich kenne niemanden, der einfach so im Programme-Ordner umherschnüffelt, wild und wahllos irgendwelche Dateien nimmt und sonst was mit denen veranstaltet und NICHT weiß, dass er damit etwas kaputt machen kann.

Um was geht es dir eigentlich? Um das nicht löschen deiner Daten oder um das nicht verändern deiner Daten?
Wenn es dir nur um das nicht editieren geht, dann verschlüssel sie doch. Wenn es um das nicht löschen geht, dann such dir ein Verzeichnis (AppData oder so) was für solche Sachen gedacht ist. Du kannst nicht komplett verbieten, dass diese Datei nur von deinem Programm verändert werden kann und auch für immer da bleiben muss.

Mir fällt gerade ein, dass man die Daten ja auch als Ressource mit in die Exe packen kann.


Flare

Andreas L. 1. Feb 2007 19:53

Re: Wie Einstellungen am sichersten speichern?
 
Es handelt sich um URLs. Pro Zeile eine. So eine embedded-DB wäre auch was feines. Da ich annehme das embedded nicht für das speichern in die exe oder einer ressource dll steht, muss also die DB auch irgendwo als Datei vorhanden sein. Die kann, sofern die nötigen Userrechte zur Verfügung stehen, auch gelöscht werden. Also ist die beste Lösung, die Datei exklusiv zu öffnen. Nur wie mache ich das? Und wo speichere ich die Datei(en) damit mein Updateprogramm welches u. U. auf einen eingeschränkten Konto läuft die Daten eintragen kann? AllUsers-Ordner?

EDIT: Mein Projekt ist quasi eine Kindersicherung mit einigen weiteren Funktionen (womit es auch für andere Erwachsene interessant wird). Wenn eine oder alle Filterlisten gelöscht werden ist mein Programm nutzlos.

SirThornberry 1. Feb 2007 19:59

Re: Wie Einstellungen am sichersten speichern?
 
Wie bereits erwähnt würde ich das ganze über einen Service laufen lassen der die ganze Zeit läuft und somit die Datei die ganze Zeit in Beschlag hat (exclusiv geöffnet). Das Programm was der User mit eingeschränkten Rechten dann bekommt ist nur ein Client welcher mit dem Service kommuniziert. Der Client kann also nur vordefinierte Aktionen ausführen da er nicht an die Datei ran kommt sondern nur dem Service sagen kann was dieser machen soll.

Andreas L. 1. Feb 2007 20:04

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von SirThornberry
Wie bereits erwähnt würde ich das ganze über einen Service laufen lassen der die ganze Zeit läuft und somit die Datei die ganze Zeit in Beschlag hat (exclusiv geöffnet). Das Programm was der User mit eingeschränkten Rechten dann bekommt ist nur ein Client welcher mit dem Service kommuniziert. Der Client kann also nur vordefinierte Aktionen ausführen da er nicht an die Datei ran kommt sondern nur dem Service sagen kann was dieser machen soll.

Ja, diese Lösung gefällt mir auch. Leider habe ich keine Ahnung wie ich da rangehen soll. Wie kommunizieren Server und Client?

SirThornberry 1. Feb 2007 20:07

Re: Wie Einstellungen am sichersten speichern?
 
eigentlich wie ein normaler kleiner Chat (dazu gibt es jede Menge Beispiel weil sich sehr viele an einem einfachen Chat versuchen). Der Client (Programm welches der eingeschränkte Nutzer hat) verbindet zum Server (Dienst) und dann kann der Client Daten an den Server senden und umgekehrt. für das Senden gibt es in aller Regel funktionen wie SendBuffer denen einfach ein Buffer (zum Beispiel String) übergeben wird und dieser Buffer kommt dann so auf der Gegenseite an und kann dort ausgewertet werden.

Andreas L. 1. Feb 2007 20:13

Re: Wie Einstellungen am sichersten speichern?
 
Zitat:

Zitat von SirThornberry
eigentlich wie ein normaler kleiner Chat (dazu gibt es jede Menge Beispiel weil sich sehr viele an einem einfachen Chat versuchen). Der Client (Programm welches der eingeschränkte Nutzer hat) verbindet zum Server (Dienst) und dann kann der Client Daten an den Server senden und umgekehrt. für das Senden gibt es in aller Regel funktionen wie SendBuffer denen einfach ein Buffer (zum Beispiel String) übergeben wird und dieser Buffer kommt dann so auf der Gegenseite an und kann dort ausgewertet werden.

Also kann ich die ganz normalen TTCPClient und TTCPServer verwenden? Oder bin ich mit den Indy besser bedient?

Jelly 1. Feb 2007 21:00

Re: Wie Einstellungen am sichersten speichern?
 
Eingeschränkte Benutzer, denen kannst du einfach nur Lesezugriffe auf deine Parameterdatei verpassen. Dazu kann z.B. eine ini-Datei herhalten. Sind die Datenmengen zu gross, so nimm eine Datenbank, und gib dort den Benutzer nur Lesezugriff. Lesezugriff innerhalb der Datenbank (als DB User), und Lesezugriff im Filesystem vom Windows. Die DB Engine läuft prinzipiell unter dem SYSTEM Account. Es reciht also aus, wenn Admins und der Account SYSTEM Vollzugriff auf die DB Datei bekommen. Alle andere wird im Usermanagement der DB konfiguriert.

Andreas L. 2. Feb 2007 17:07

Re: Wie Einstellungen am sichersten speichern?
 
Um nochmal auf den TCP Server zurück zu kommen: Der Client läuft ja dann im Konto des eingeschränkten Benutzers, also kann dieser Benutzer den Client einfach über den Taskmanager killen. Gibt es eine Möglichkeit das zu verhindern?

Außerdem bekomme ich das mit dem Server/Client nicht hin. Bisher habe ich folgendes:

Client:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 text: String;
begin
 text := edit1.text;
 tcpclient1.SendBuf(text, length(text), 0);
end;
Server:
Delphi-Quellcode:
procedure TForm2.TcpServer1GetThread(Sender: TObject;
  var ClientSocketThread: TClientSocketThread);
begin
 showmessage(clientsocketthread.ClientSocket.Receiveln);
end;
Port: 8536
Host: 127.0.0.1

Nicht viel, ich weiß. Aber aus der Delphi-Hilfe werde ich nicht schlau. Da ist ja nichtmal ein Beispiel aufgeführt. Eine Fehlermeldung kommt nicht. Aber der gesendete String kommt einfach nicht an... Was mache ich falsch?


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