Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dateikopie ohne Rechte im Zielverzeichnis? (https://www.delphipraxis.net/173673-dateikopie-ohne-rechte-im-zielverzeichnis.html)

Billa 10. Mär 2013 08:12

Dateikopie ohne Rechte im Zielverzeichnis?
 
Hallo zusammen,

der Titel ist wahrscheinlich mehr als unklar. Dahinter verbirgt sich ein einfaches Problem:
auf einer Win7-Maschine sollen Dateien an ein "sicheren" Ort (Verzeichnis) kopiert werden, ohne dass der
angemeldete Benutzer selbst dort schreiben/lesen darf. Meine Idee ist also, dass der Kopiervorgang nicht
vom Benutzer, sondern von einem Programm (Dienst?!) ausgeführt wird, damit keine höheren Rechte oder
fremde Passworte benötigt und auch nicht jedesmal abgefragt werden müssen. Dieser Vorgang soll von einem
kleinen Programm angestossen werden, dass die Dateien wie in einer Bibliothek protokolliert und so immer
"weiß", welche Dateien im geschützten Bereich liegen.

Zum Stichwort "Dienst" habe ich z.B. in den Tutorials einiges gelesen (zugegebenermassen aber noch nicht alles
ausprobiert). Soweit ich es verstanden habe, drehte es sich in diesen Fällen immer um kontinuierliche
Prozesse (Messwerte etc.), ich möchte aber den "Dienst" nur bei Bedarf aus einem Programm mit eigenen Parametern
(zwei Dateinamen inkl. Pfad) aufrufen.

Vielleicht gibt es aber auch etwas viel Eleganteres. Ach ja, es darf (ausser meiner Zeit :wink:) möglichst
nix kosten.

Ich hoffe auf Anregungen ...


Was ich bisher ausprobiert habe sind mehrere Varianten mit RunAs, MachMichAdmin etc. die mein "Bibliotheksprogramm" starten. Der Vorgang klappt dann, ABER: entweder muss doch einmal zu Beginn
einer Sitzung ein Passwort eingegeben werden oder - fast schlimmer - danach das "geschützte" Verzeichnis
für den User (z.B. Explorer) offen ist. So komme ich immer wieder auf die "Dienst"-Lösung, weiß aber
nicht, wie mein Programm mit dem Dienst kommunizieren soll.

Luckie 10. Mär 2013 23:06

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Dienste dürfen nur Administratoren starten und stoppen. Du verlagerst das Problem also nur.

Sir Rufo 10. Mär 2013 23:13

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Die billigste Lösung wäre wohl ein FTP-Server im Dienst und in der Anwendung den FTP-Client.

Billa 11. Mär 2013 06:12

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Danke erstmal Euch beiden.

@Luckie:

Dass ist doch durchaus erwünscht, damit "nix kaputtgeht". Aber Du hast Recht: vielleicht löst man das Problem grundsätzlich besser mit einem Server. Dann könnte der Dienst dort mit allen notwendigen Rechten laufen. Zusätzlich ergäben sich über eine Domäne weitere Steuerungsmöglichkeiten z.B. für das Benutzerverzeichnis. Dagegen steht natürlich, das ein Server nicht für lau zu haben ist. Bei vier Nutzern ist man aber mit weniger als 5€ im Monat dabei.

@Sir Rufo:

Interessanter Gedanke. In Kombination mit dem Server ginge dann auch die Anbindung der "Außenwelt". Es lohnt sich auf alle Fälle darüber nachzudenken (und mit den vier potentiellen Benutzern zu diskutieren).


Bei FTP ist die Funktionsweise einigermaßen klar. Aber darüberhinaus? Kennt jemand ein Tutorial o.ä., in dem nicht nur die Programmierung eines Dienstes, sondern auch die Ansteuerung durch Software beschrieben ist?

Sir Rufo 11. Mär 2013 06:42

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Deine Frage ist doch nach einem Transport Protokoll. Wie kommst du jetzt auf einen Server?

Sollen die Dateien lokal oder zentral abgelegt werden?

Soweit erstmal egal, denn um einen Dienst kommst du nicht herum (und schlimm ist das auch nicht).
Der Dienst läuft mit den Rechten, die zum Lesen und Schreiben der Dateien notwendig sind.
Mit dem Transport Protokoll (z.B. FTP = File Transport Protokoll) werden die Daten an den Dienst geliefert, abgerufen oder sogar gelöscht.
Dort wird jetzt entschieden, ob und wie diese Daten gespeichert werden, bzw. welche Datei zurückgeliefert wird bzw. wie die Löschung ausgeführt wird.

Einen Client für FTP zu schreiben ist auch kein Geheimnis und dafür sollten sich auch zig Beispiele finden.

Welches Protokoll du auch verwendest (FTP, WebDAV, HTTP, ein eigenes) die Funktionsweise nach dem Protokoll bleibt gleich. FTP lässt sich hierfür aber am einfachsten benutzen, da es genau dafür (Übertragung von Dateien) gedacht ist. Ob es das Beste in dieser Situation ist, musst du allerdings selber entscheiden.

Billa 11. Mär 2013 09:00

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Der Gedanke an einen Server entstand durch Luckies berechtigten Einwand, dass das Problem der Berechtigung durch einen Dienst (auf einem Win7-Rechner) nur verlagert wird. Also ist meine augenblickliche Vorstellung:
  • Zentrale Speicherung auf einem Server.
  • Dort läuft ein (FTP-) Server mit Zugriffsrechten auf die zentrale Ablage.
  • Ebenfalls dort angesiedelt ist eine Datenbank, die Buch über "Rein" und "Raus" führt.
  • Die User verwalten Ihre Dateien mit Hilfe eines lokalen Programms, das auf die Datenbank auf dem Server zugreift und via FTP-Client Daten mit dem FTP-Server tauscht.
  • Mit Hilfe des Programms ist jeder Nutzer in der Lage, anderen Nutzern Zugriff auf seine Dateien zu gewähren, ohne selbst Admin-Rechte haben zu müssen.

... jetzt wo ich es schreibe, fällt mir auf, dass man das Ganze auch ohne Server in einer Datenbank auf der Win7-Maschine erledigen kann .... der DB ist schließlich egal, ob neben den Berechtigungen auch gleich die Dateien selbst gespeichert werden. Hätte ich auch vorher drauf kommen können. Danke jedenfalls für die offenbar nötigen Denkanstösse ...

Sir Rufo 11. Mär 2013 09:19

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
Dann hast du Luckie nicht verstanden ...

Wenn du zum kopieren einer Datei den Dienst starten willst, dann benötigst du (der aktuelle Anwender) Administratoren Rechte. Was nutzt es also, einen Bereich zu schützen, wenn der Benutzer "Administrator" sein muss um mit deinem Programm arbeiten zu können. Als "Administrator" kann er sich auf alles einen Zugriff holen.

Starte einfach den Dienst und übergib diesem (z.B. per FTP) das was du erreichen möchtest (laden,speichern,löschen,etc.) und der Dienst führt diese Aktion dann im eigenen Kontext aus.

Auf einen Server bezog sich die Aussage von Luckie noch nicht einmal ansatzweise

Sir Rufo 11. Mär 2013 09:35

AW: Dateikopie ohne Rechte im Zielverzeichnis?
 
BTW

Dem FTP-Server ist es sowas von egal ob es sich um echte Dateien handelt. Der FTp-Server arbeitet einfach nur mit Streams. Wo dieser Stream herkommt, wie du den verwaltest, dass ist deine Sache.

Du könntest also das Dateisystem nebst den Inhalten selber komplett in einer Datenbank verwalten (ob das Sinn macht ist erstmal egal).

Auch ist es dem FTP-Server schnuppe, wo die Dateien liegen (solange er darauf zugreifen kann).

Du kannst also die gesamte Dateistruktur in deiner DB halten und die Datei-Inhalte werden unter einem beliebigen Dateinamen auf der Platte abgelegt.
Die Datenbank führt z.B. ein ID-Feld für jede Datei. Diese ID ist nun auch gleichzeitig der reale Dateiname auf der Platte.

Damit die Verzeichnisse nicht übervoll werden kannst du diese nach folgender Logik ablegen:

Eine ID ist idR. ein Int64 und kann als 8-stellige Hex-Zahl dargestellt werden.
Die Datei
Delphi-Quellcode:
MeineDatei.txt
mit der ID
Delphi-Quellcode:
485325
in Hex
Delphi-Quellcode:
000767CD
ist dann real auf der Platte unter
Delphi-Quellcode:
{Ablage-Verzeichnis}\00\07\67\CD.txt
zu erreichen


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