Dokumentenverwaltung light

MS-Tech

Erfahrenes Mitglied
Hallo Zusammen,

ich bin gerade dabei eine Dokumentenverwaltung bzw. ein Dokumentenmanagementsystem "light" zu entwickeln. Ich bin aber jetzt an einem Punkt angelangt, mit dem ich noch nie in Berürhung gekommen bin.

Ich möchte alle Dokumente, die in der Verwaltung abgelegt werden, natürlich nicht in einer Datenbank speichern, sondern in einem Verzeichnis ablegen. Da die Dokumente natürlich revisionssicher abgelegt werden müssen, muss doch dieses vor Zugriffen geschützt werden oder? Ich kann nicht einfach Dateien in ein Verzeichnis legen und jeder x-beliebige Dritte kann dort Dateien entfernen, ändern etc. Wenn ich nun so ein Zugriffsgeschütztes Verzeichnis habe (Active Directory****?), wie kann ich dann per Java Anwendung in dieses Verzeichnis schreiben, also Dateien ablegen etc? Mein Problem hier ist auch, dass ich meine Anwendung nicht nur auf Windows beschränken möchte, sondern diese sollte natürlich auch auf Linux oder auch MacOs lauffähig sein.

Ich habe mir schon überlegt die einzelnen Dateien, angereichert um weitere Informationen, serialisiert rauszuschreiben, nur dann hätte ich zwar den Punkt erledigt, dass eigentlich niemand von außerhalb diese Dateien verändern kann, aber das Löschen kann ich damit auch nicht verhindern.

Hat jemand von euch ne Idee****?

Viele Grüße
MS-Tech
 
Zuletzt bearbeitet:
Hallo,

gerade was Sicherheit angeht bin ich auch kein Experte, aber wie sieht es denn mit einem speziellen Benutzer aus, der die Applikation ausführt? Ich denke da zum Beispiel an so etwas wie den benutzer www-data der Zugriff auf SVN Repositories haben muss, damit der Webbrowser da lesen kann. Oder der Benutzer "redmine" der für die Projekt-Verwaltungs-Software Redmine angelegt wird.

Könnte soetwas da vielleicht helfen?

Gruß,
Wolf
 
Hi Wolf,

vielen Dank für deine Antwort.

Hat der SVN nicht seine eigene Datenbank bzw. sind die Daten im SVN nicht in einer Flat-File Struktur gesichert?

Vielleicht wäre es aber doch interessant, die Metadaten der einzelnen Dateien in der "Haupt"-Datenbank zu speichern und die Files in einer Zweiten Datenbank? So hätte ich kein Problem, dass ich auf geschützte Verzeichnisse zugreiffen müsste etc. Ich bräuchte eben 2 unterschiedliche Datenbankverbindungen. Eine für die "Haupt"-Datenbank und eine für die Files. Wäre doch vielleicht auch eine Möglichkeit oder? Ich denke doch, dass eine Postgres-DB, ein SQL-Server oder auch eine MySQL-DB diese Dateien handhaben könnten oder?

Viele Grüße
MS-Tech
 
Guten Morgen MS-Tech,

deine Idee ist denke ich auch gut, allerdings sehe ich den Zusammenhang mit deinem ersten Post gerade nicht (kann auch daran liegen, dass es einfach noch zu früh ist und der Kaffee noch nicht wirkt ;) ).

Ich dachte dir geht es einzig um die Zugriffskontrolle. Wenn du die jetzt deine Daten an 2 verschiedenen Orten speicherst, bleibt das Problem ja bestehen, dass irgendjemand die Daten troztdem manuell verändern kann und damit deine Versionskontrolle "zerschiesst".

Gruß,
Ein noch müder Wolf ;)
 
Hi,

na ausgeschlafen? :)

Also....wenn ich die Files irgendwo im Dateisystem ablege, dann müssen die Ordner natürlich gewissen Zugriffsberechtigungen unterliegen. Meine Anwendung muss aber trotzdem noch auf die Files zugreiffen können. Deshalb hätte es notwendig sein können, dass ich irgendwie Zugriff auf das ActiveDirectory haben hätte müssen :). Also wenn z.B. ein Ordner nur für Administratoren freigegeben ist, dann dürfen normale Benutzer dort natürlich nicht zugreiffen. Hier hätte ich dann eben ein Problem mit meiner Anwendung. Habe ich nun aber ne zweite Datenbank, in der nur die Files gespeichert werden, so bleibt die "Hauptdatenbank" schön schlank. Hier kann ich dann über meine Anwendung steuern, wer dann Zugriff und welchen Zugriff ein Benutzer auf die Files hat.

Ne die Files werden dann eben in der Datenbank gespeichert, also in meinem System. Ich hab nur einen Speicherort.

Na doch es ging mir auch um ide Zugriffskontrolle, nur alles andere ist betriebssystemabhängig und das möchte ich, wenn es geht, vermeiden. Bis jetzt läuft meine Anwendung auf jeder Plattform, auf der ich Java installieren kann (ausgenommen Smartphones, Tablets etc.).

Viele Grüße

MS-Tech
 
Also....wenn ich die Files irgendwo im Dateisystem ablege, dann müssen die Ordner natürlich gewissen Zugriffsberechtigungen unterliegen. Meine Anwendung muss aber trotzdem noch auf die Files zugreiffen können. Deshalb hätte es notwendig sein können, dass ich irgendwie Zugriff auf das ActiveDirectory haben hätte müssen :).

Vielleicht mal ein anderer Ansatz: Verschlüssel doch die auf Festplatte abgespeicherten Dateien. Dazu gibts fertige Libraries. Jetzt mußt du nur den Schlüssel vor dem Benutzer schützen. Und das kannst du ohne Probleme machen, indem du ihn in der Datenbank auf dem Server hinterlegt und nur "bei Bedarf" holst. Das hilft natürlich nicht gegen böswillige Löschaktionen, aber wenn du den Dateinamen zufällig wählst, dann ists nicht so einfach, "Dokument XY" zu finden und zu löschen.

Habe ich nun aber ne zweite Datenbank, in der nur die Files gespeichert werden, so bleibt die "Hauptdatenbank" schön schlank. Hier kann ich dann über meine Anwendung steuern, wer dann Zugriff und welchen Zugriff ein Benutzer auf die Files hat.

Wenn du sowas machst, dann ist es sinnvoll, eine Checksumme der Datei immer mitzusenden und zu verifizieren. Sagt meine Erfahrung.

Viele Grüße

Thinker
 
Hi,

vielen Dank für deine Antwort.

Ja die Files zu Verschlüsseln habe ich mir auch schon überlegt. Ich habe hier ggf. nur wieder das Problem, wenn Ordner Zugriffsberechtigungen haben. Mit der Ablage der Files in der Datenbank hätte ich das umgangen. Wenn es um Zugriffsberechtigungen geht, dann ist das wieder sehr betriebssystemabhängig, was ich eigentlich nicht so wirklich will.

Kannst du mir das mit der Checksumme kurz erklären? Wieso benötige ich eine Checksumme?

Viele Grüße
MS-Tech
 
Hi,
Ja die Files zu Verschlüsseln habe ich mir auch schon überlegt. Ich habe hier ggf. nur wieder das Problem, wenn Ordner Zugriffsberechtigungen haben. Mit der Ablage der Files in der Datenbank hätte ich das umgangen. Wenn es um Zugriffsberechtigungen geht, dann ist das wieder sehr betriebssystemabhängig, was ich eigentlich nicht so wirklich will.

Ich ziehe den Vorschlag mit den Verschlüsselungen zurück, der hilft nur gegen Änderungen, nicht gegen Löschen. Denn man kann recht trivial (zumindest unter Linux) herausfinden, welche Dateien ein Prozess gerade geöffnet hat, und das muß ja für die Verschlüsselung passieren.

Kannst du mir das mit der Checksumme kurz erklären? Wieso benötige ich eine Checksumme?

Ich hab mir das angewöhnt, weils vor Programmierfehlern schützt. Ich lasse vor der Übertragung auf den Server eine Checksumme berechnen und schicke die mit. So kann ich auf dem entfernten System sicherstellen, daß auf dem Transportweg keine Programmierfehler passiert sind. Dito, wenn ich die Dateien hole. Bei mehreren Systemen mit eventuell unterschiedlichen Charsets hat man da ganz schnell Probleme, wenn Textdateien betroffen sind. Eine Checksumme sagt dir, daß bei der Übertragung und Abspeicherung keine Datenveränderungen passiert sind.
 
Weiters passieren auch durch die Übertragung ab und zu Fehler,
die das TCP/IP-Gerüst nicht erkennt.

"Dokumente" ist ein weiter Begriff, aber es werden wohl nicht nur komplett unwichtige Sachen sein.
Ein Schwergewicht wie SHA-irgendwas (im Vergleich zu den CRCs etc.)
reduziert die Fehlerwahrscheinlichkeit enorm.
(würde sogar sagen, gegen zufällige Übertragungsfehler
ist man für den Rest seines Lebens gesichert)
 

Neue Beiträge

Zurück