2 Fragen: Blob-Felder und Verschlüsselung

Hi,

ich habe bisher nur wenig Erfahrung mit PostgreSQL und nur mittelmäßige Kenntnisse in Sachen Datenbanken.

  1. Mal angenommen, jemand will eine Dokumentenverwaltungs-Software schreiben und alle Dokumente und Bilder in der Datebank ablegen. Dafür sind doch Blob-Felder vorgesehen, oder? Hier steht, dass Felder in PostgreSQL max. 1 GB groß sein dürfen. PostgreSQL, das fortschrittlichste Open Source Datenbanksystem - Startseite
    Was macht man denn, wenn der Benutzer seine z.B. DVD-Sammlung in der Datenbank speichern will?

  2. Ist es möglich seine gesamte Datenbank zu verschlüsseln? Ich möchte die Datenbank gerne so absichern, dass im Falle eines Diebstahls des Servers der Dieb nicht an die Daten kommt, ohne den Schlüssel zu kennen.

Es ist generell eine schlechte Idee, komplette Binärdaten in der DB abzulegen. Zur Not kannst du dafür aber BLOBs nutzen, ja.

Wenn möglich, solltest du die Daten im Dateisystem lassen (oder in ein extra Verzeichnis kopieren) und in der DB bloss eine Referenz (den Pfadnamen) hinterlegen.


Zur Verschlüsselung: das ist eine Aufgabe deines Servers bzw. Betriebssystems. Das hat nichts mit der Datenbank zu tun.

hey,

wofür wurden dann blobs geschaffen? ich dachte, die wären genau dafür da z.b. dokumente drin abzulegen.

ich finde die idee toll, alles in die datenbank zu stecken. man muss somit immer nur ein backup von der datenbank machen. man braucht sich um die rechtevergabe für den dateizugriff nicht zu kümmern, da es von der datenbank geregelt wird.

Blobs sind zum Ablegen von binären Daten gedacht, allerdings kommt das aus der Geschichte: sehr viel früher (schon sehr lange her) konnte PostgreSQL mal nur Daten bis max. 8k pro Datenfeld aufnehmen. Da hat man eine Möglichkeit gebraucht, längere Datensätze irgendwo zu speichern.

An sich ist es alles in allem eine schlechte Idee, große binäre Daten in einer Datenbank abzulegen, dabei performt die Datenbank nicht sonderlich gut.

Nun ja, man könnt nun fragen, wofür Dateisysteme geschaffen wurden. Okay, wenn Du unbedingt willst, daß Du da solch fetten Dinger reinschreiben willst, wirst Du wohl extern Deine Dateien splitten müssen und in einer Detailtabelle zu dieser Datei die einzelnen Trümmer speichern.

ich finde die idee toll, alles in die datenbank zu stecken. man muss somit immer nur ein backup von der datenbank machen. man braucht sich um die rechtevergabe für den dateizugriff nicht zu kümmern, da es von der datenbank geregelt wird.

Das ist aber auch wohl das einzigste Argument, eine DB als Filesystem zu verwenden.

Ich weiß nicht, ob dieses Projekt noch lebt, vielleicht hilft es Dir ja weiter: psqlfs - A File System using PostreSQL, aber das Changelog auf der Seite sieht eher nach Trauer aus.

Ansonsten denke ich da wie ads. Bedenke: jedes Update hinterläßt tote Tupel. Schon deswegen wirst Du Metadaten von den eigentlichen Daten trennen wollen. Und die Performance wird definitiv schlechter sein als bei einem Filesystem, insbesondere bei schreibenden Operationen, weil dann noch das DB-interne TX-Log zu schreiben ist.

Andreas

Zum Thema Verschlüsselung:
Wenn du nicht gleich die komplette DB verschlüsselt möchtest (da dann wohl am besten das komplette Dateisystem verschlüsseln -> wie schon gesagt Aufgabe des Betriebssystems) sondern nur einzelen Felder:
Ich habe (bisher) ganz gute Erfahrung mit pgcrypto gemacht.
Unter pgcrypto - cryptographic functions for PostgreSQL
findest du eine Erklärung insb. mit Beschreibung der nach der Installation zur Verfügung stehenden Funktionen.

Gruß, Tim