Das Beste Der Weg besteht darin, die Verschlüsselung auf dem Client oder Anwendungsserver durchzuführen, sodass die Datenbank keine Ahnung hat, was die Schlüssel sind, und die Daten nicht entschlüsseln kann. Wenn der Client / Appserver auf einem anderen Host liegt, umso besser.
Wenn Ihre Datenbank die Daten für Sie verschlüsselt und entschlüsselt, besteht die Gefahr, dass die Schlüssel zusammen mit der Datenbank gestohlen werden.
Wenn Sie die datenbankinternen Kryptofunktionen von pgcrypto verwenden, können Sie die Anwendung den Schlüssel zusammen mit den Daten senden lassen, was zumindest etwas hilfreich ist. Es besteht jedoch immer noch das Risiko, dass die Schlüssel in den Protokollen offengelegt werden, wenn ein hilfreicher Systemadministrator die aggressive Anweisungsprotokollierung oder das automatische Plan-Dumping aktiviert, und am Ende sind die Schlüssel anfälliger, wenn sie an die Datenbankmaschine gesendet werden, als wenn dies nicht der Fall ist . Ein Angreifer, der die Kontrolle über die Datenbankmaschine übernimmt, kann auch die Protokolleinstellungen ändern, die postgresql-Binärdateien ersetzen oder den Datenverkehr ausspionieren, um auf diese Weise Schlüssel und Daten zu erfassen.
Wenn sich der Anwendungsserver und die Datenbank auf demselben Computer befinden und von denselben Rollen verwaltet werden, macht es weniger Sinn, sich Gedanken über deren Isolierung zu machen, und es kann sinnvoll sein, einfach pgcrypto zu verwenden.
Denken Sie in jedem Fall an das Salz!