PostgreSQL offre du chiffrement sur plusieurs niveaux et fournit une flexibilité pour protéger les données d'être révélées suite à un vol du serveur de la base de données, des administrateurs non scrupuleux et des réseaux non sécurisés. Le chiffrement pourrait aussi être requis pour sécuriser des données sensibles, par exemple des informations médicales ou des transactions financières.
Les mots de passe des utilisateurs de la base de données sont stockées suivant des hachages (déterminés par la configuration du paramètre password_encryption), donc l'administrateur ne peut pas déterminer le mot de passe actuellement affecté à l'utilisateur. Si le chiffrage MD5 ou SCRAM est utilisé pour l'authentification du client, le mot de passe non chiffré n'est jamais, y compris temporairement, présent sur le serveur parce que le client le chiffre avant de l'envoyer sur le réseau. SCRAM est préféré parce qu'il s'agit d'un standard Internet et parce qu'il est bien plus sécurisé que le protocole d'authentification MD5 spécifique à PostgreSQL.
Le module pgcrypto autorise le stockage crypté de certains champs. Ceci est utile si seulement certaines données sont sensibles. Le client fournit la clé de décryptage et la donnée est décryptée sur le serveur puis elle est envoyée au client.
La donnée décryptée et la clé de déchiffrement sont présente sur le serveur pendant un bref moment où la donnée est décryptée, puis envoyée entre le client et le serveur. Ceci présente un bref moment où la données et les clés peuvent être interceptées par quelqu'un ayant un accès complet au serveur de bases de données, tel que l'administrateur du système.
Le chiffrement du stockage peut se réaliser au niveau du système de fichiers ou au niveu du bloc. Les options de chiffrement des systèmes de fichiers sous Linux incluent eCryptfs et EncFS, alors que FreeBSD utilise PEFS. Les options de chiffrement au niveau bloc ou au niveau disque incluent dm-crypt + LUKS sur Linux et les modules GEOM geli et gbde sur FreeBSD. Beaucoup d'autres systèmes d'exploitation supportent cette fonctionnalité, y compris Windows.
Ce mécanisme empêche les données non cryptées d'être lues à partir des lecteurs s'ils sont volés. Ceci ne protège pas contre les attaques quand le système de fichiers est monté parce que, une fois monté, le système d'exploitation fournit une vue non cryptée des données. Néanmoins, pour monter le système de fichiers, vous avez besoin d'un moyen pour fournir la clé de chiffrement au système d'exploitation et, quelque fois, la clé est stocké quelque part près de l'hôte qui monte le disque.
Les connexions SSL cryptent toutes les données envoyées sur le
réseau : le mot de passe, les requêtes et les données renvoyées. Le
fichier pg_hba.conf
permet aux administrateurs de spécifier
quels hôtes peuvent utiliser des connexions non cryptées (host
)
et lesquels requièrent des connexions SSL (hostssl
). De plus,
les clients peuvent spécifier qu'ils se connectent aux serveurs seulement
via SSL. stunnel ou ssh peuvent aussi
être utilisés pour crypter les transmissions.
Il est possible que le client et le serveur fournissent des certificats SSL à l'autre. Cela demande une configuration supplémentaire de chaque côté mais cela fournit une vérification plus forte de l'identité que la simple utilisation de mots de passe. Cela empêche un ordinateur de se faire passer pour le serveur assez longtemps pour lire le mot de passe envoyé par le client. Cela empêche aussi les attaques du type « man in the middle » où un ordinateur, entre le client et le serveur, prétend être le serveur, lit et envoie les données entre le client et le serveur.
Si vous n'avez pas confiance en l'administrateur système du serveur, il est nécessaire que le client crypte les données ; de cette façon, les données non cryptées n'apparaissent jamais sur le serveur de la base de données. Les données sont cryptées sur le client avant d'être envoyé au serveur, et les résultats de la base de données doivent être décryptés sur le client avant d'être utilisés.