Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Temporäre Dateizugriffsrechte setzen, geht das? (https://www.delphipraxis.net/206270-temporaere-dateizugriffsrechte-setzen-geht-das.html)

Kostas 5. Dez 2020 12:13

Temporäre Dateizugriffsrechte setzen, geht das?
 
Hall Zusammen,

das Thema ist genauso blöd wie der Titel, sorry dafür.

Ein User soll in ein bestimmtes Verzeichnis überhaupt kein Zugriffsrecht haben.
Aus einer Delphi Anwendung heraus, sieht es eine TStringList an Dateien aus diesem gesperrten Verzeichnis die er bearbeiten dürfte.
Wenn der Anwender die Datei bearbeiten möchte, müsste die Delphi Anwendung vorher Ihm die Rechte auf diese eine Datei geben, anschließend die registriere Anwendung starten um diese eine Datei bearbeiten und speichern zu können. Wenn Delphi beendet wird, oder der User sich abmelden würde, müssten diese temporären Zugriffsrechte wieder gelöscht werden.

Bei Setup-Programmen wird manchmal der User als Admin hochgestuft und kann damit die Anwendung installieren. Das wäre in diesem Scenario nicht erwünscht da er dann vollen Zugriff über den Explorer auf das Verzeichnis hätte. Man müsste also schon die Rechte diese einen Daten setzen und zwar temporär. Nach dem beenden der Delphi-Anwendung oder spätestens nach dem Abmelden müssen diese Rechte verloren gehen.

Gibt es soetwas?
Hat jemand irgend eine Idee dafür?

Gruß Kostas

himitsu 5. Dez 2020 12:20

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Berechtigungen im Dateisystem sind permanent. (bis vor Kurzem gab es mal Transaktionen im NTFS, welche man temporär nutzen und dann reverten könnte, aber das wird leider gerade wieder ausgebaut ... MSDN-Library durchsuchenCreateFileTransacted usw.)
Zitat:

Nach dem beenden der Delphi-Anwendung oder spätestens nach dem Abmelden müssen diese Rechte verloren gehen.
Wenn das Programm oder der Rechner abstürzt (abgeschossen wird), dann gibt es niemanden der das zurücksetzt und es bleibt ewig offen?
Außerdem kann auch jeder Andere bzw. jedes andere Programm dann auf die Dateien zugreifen, so lange dieses Programm offen wäre.

Nicht "Admin", sondern man erstellt einen Benutzer, der die "nötigen" Rechte und Freigaben bekommt.
Und mit diesem Benutzer/Rechten kann dann das Programm gestartet werden, bzw. es holt sich wärend der Arbeit diese User-Berechtigungen. (Impersonate im Thread/Process oder CreateProcess mit Unterprogramm)


Oder er greift nicht direkt auf das Dateisystem zu.
Temporär mit der Netzwerkfreigabe verbinden (Programm nutzt dafür einen passenden Nutzer/Passwort)
oder über einen Dateiserver mit Zugangkontrolle, wo das Programm die Datei runterlädt, lokal speichert+bearbeitet und am Ende die Änderung hochladen kann.

Kostas 5. Dez 2020 12:51

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Danke für die Antwort.

raus- und wieder reinkopieren ist nicht erwünscht. Die Struktur soll so bleiben.

Die temporäre Netzfreigabe wäre eine Option. Die Schwierigkeit dabei ist, es gibt geschätzt ca. 50 Verzeichnisse aus diesen einzelne Dateien bearbeitet werden dürfen. Die temporäre Dateifreigabe wäre dafür gut geeignet. Wenn die Anwendung abschmiert wird die Freigabe nicht gleich entzogen aber wenigstens beim abmelden. Die User werden zu einer bestimmten Uhrzeit täglich zwangsgetrennt. Bis zur dieser Zeit hätte der User auch über den Explorer Zugriff aber nur auf diese eine Datei. Wenn es das nicht mehr geben soll, ist das sehr schade.

Ein Dateiserver-Anwendung bringt leider auch nichts da es Fremdprogramm sind die diese Dateien bearbeiten dürfen wie z.B. Office, CAD-Programme usw.

dummzeuch 5. Dez 2020 13:57

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Man könnte zwei unterschiedliche Freigaben für dasselbe Verzeichnis einrichten. Auf die eine hat der normale Benutzer nur Lesezugriff. Auf die zweite hat er gar keinen Zugriff, aber ein anderer, dafür eingerichteter Account darf schreiben. Dann muss man nur noch das Programm unter diesem zweiten Account zugreifen lassen, analog zu
Code:
net use \\server\share /user:xxxx
Wobei, war da nicht was, dass man sich von einem PC aus bei einem Server nur mit einem Account zur gleichen Zeit anmelden konnte? Falls das immernoch so ist, kann man sich behelfen, indem man das Programm nicht auf den Servernamen sondern auf die IP-Adresse zugreifen lässt:
Code:
net use \\<ip des Servers>\share /user:xxxx
Zitat:

da es Fremdprogramme sind die diese Dateien bearbeiten dürfen wie z.B. Office, CAD-Programme usw.
Hm, das ist schwieriger. Vielleicht ein Vorschaltprogramm, welches die Dateien lokal kopiert, sie dort bearbeiten lässt und dann wie oben beschrieben unter einem anderen Account zurück auf den Server kopiert?

HolgerX 6. Dez 2020 05:16

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Hmm..

Also das mit der Freigabe kannst Du knicken...

Denn der User kann immer noch nicht auf die Dateien Zugreifen, wenn er auch ansonsten nicht das Recht hat, auf diese direkt zuzugreifen. Windows unterscheidet zwischen 'Freigabe' und 'NTFS' Zugriffsrechte.
Egal was in Freigabe steht, ohne die NTFS Rechte kein Zugriff....

Kann der User sich die Verzeichnisinhalte auflisten lassen? Hat er diese Rechte?

Wenn ja, dann Dateien auflisten und durch den User auswählen lassen. Dann das externe Programm zur Bearbeitung mit einem 'anderen' User starten, welcher die notwendigen Rechte hat.

Problem hierbei:
Dein 'Starterprogramm' müsste die Zugriffsrechte des 'anderen' Users kennen...

Zugriffsrechte erteilen, ob nun dauerhaft oder temporär, kann nur ein 'anderer' User, welcher die Rechte schon hat. Sonst könnte sich ja jeder die Rechte selber geben und die Zugriffsrechte würden keinen Sinn mehr machen.

jaenicke 6. Dez 2020 06:46

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Zitat:

Zitat von Kostas (Beitrag 1478557)
Bei Setup-Programmen wird manchmal der User als Admin hochgestuft und kann damit die Anwendung installieren. Das wäre in diesem Scenario nicht erwünscht da er dann vollen Zugriff über den Explorer auf das Verzeichnis hätte. Man müsste also schon die Rechte diese einen Daten setzen und zwar temporär. Nach dem beenden der Delphi-Anwendung oder spätestens nach dem Abmelden müssen diese Rechte verloren gehen.

Dafür kann man ganz simpel ein zweites Programm mit den entsprechenden Rechten unsichtbar starten und mitlaufen lassen. Alle Zugriffe auf die gewünschten Daten wickelt man dann über dieses Programm ab. Das Originalprogramm selbst hat diese Rechte nie, so dass der Benutzer auch nicht sichtbar über diese Rechte verfügt.

Alternativ (sauberer, am Ende einfacher zu nutzen, aber komplizierter zu schreiben) wäre ein Out-of-process COM server. Wie das funktioniert ist hier beschrieben:
https://www.informit.com/articles/ar...30494&seqNum=4
http://docwiki.embarcadero.com/RADSt...Remote_Servers
Auch der bekäme dann im Hintergrund die benötigten Rechte und würde die Operationen mit diesen Rechten ausführen.

Pfaffe 6. Dez 2020 07:25

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Wenn auf dem Server ein Datenbankserver läuft, dann die Dateien in ein Blobfeld importieren, per Stored Procedure.

Frickler 7. Dez 2020 10:43

AW: Temporäre Dateizugriffsrechte setzen, geht das?
 
Vielleicht ein virtuelles Filesystem, wie CBFS (ehemals Eldos Solid File System)? Solange der "Treiber" nicht läuft, ist das einfach eine Datei.


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