Quanto sono sensibili i dati? Non hai detto Ciò rende impossibile valutare quale sia il livello di rischio appropriato. Questo è fondamentale. "Abbastanza sicuro" è sempre relativo al rischio e al tuo budget per il progetto.
Sembra una di quelle situazioni che "dimostrano qualcosa non esiste". Logicamente, è impossibile da fare. Puoi provare solo quando esiste qualcosa . Quindi non ho intenzione di riuscirci. Ma a prescindere, darò una prova a convincerti che per i dati tipici, "l'accesso diretto sicuro ai database per gli utenti non fidati" in realtà non esiste.
La connessione è solo una parte del problema "accesso sicuro". Supponiamo che tu abbia gestito tutti gli exploit di downgrade della negoziazione e così via. Anche se la connessione è crittografata con una suite di crittografia TLS priva di bug correttamente configurata, quali dati sono gli utenti non fidati che inviano tramite o prima del canale crittografato, inclusi (come Craig Ringer menzionato) autenticazione? Stai sanificandolo prima che raggiunga il database?
La patch è ovviamente richiesta, ma non abbastanza da remoto. Per un database che potrebbe avere persone che lo sfruttano in qualsiasi momento, inclusi i dati di altri utenti nel database, probabilmente si vorrebbe DAM (controllo e controllo del database) e protezione IPS e DoS sensibile alle applicazioni. C'è una ragione per cui la migliore pratica consiste nel mettere il database dietro un gateway di qualche tipo, e non esporlo direttamente in questo modo.
L'esecuzione su una porta non predefinita è la sicurezza attraverso l'offuscamento. Non fermerà nessuno che sa come eseguire un port scanner e le impronte digitali, e sicuramente non chiunque stia prendendo di mira te. Dal momento che non ti fidi dei tuoi utenti, probabilmente dovresti pensare che uno stia prendendo di mira te.
Le limitazioni dell'intervallo IP non saranno di aiuto se non ti fidi di alcun IP utente. Gli host affidabili sono utili solo per consentire gli IP attendibili e bloccare il resto ... che nel tuo caso sembra bloccare ogni IP su Internet. Non molto utile.
Supponendo che tu abbia affrontato tutto ciò, ciò che vorrei suggerire sono le transazioni, i backup e la crittografia intensa dei dati di all'interno di ciascun utente con le proprie chiavi private che il tuo server non ha accesso a, in modo che anche se un utente malintenzionato compromettesse il database, una copia di dati di altri utenti sarebbe sostanzialmente inutile per l'aggressore. Avere un server di standby VM pronto per l'uso in qualsiasi momento, e non sarebbe male avere uno spazio di archiviazione separato in modo da poter cancellare periodicamente quella VM e portarne una nuova. Ciò non impedirebbe a qualcuno di possedere il server, ma contribuirebbe almeno a proteggere i dati stessi e offrirà una risposta e un ripristino rapidi.
Ma prima ancora di entrare nei dettagli specifici di PostgreSQL.
Come puoi vedere, una maggiore sicurezza diventa costosa e richiede molto tempo. Se i dati sono cat doodles sui tovaglioli, probabilmente non ne vale la pena. Saresti meglio servito da un diverso metodo di accesso.