Qual è il metodo migliore per archiviare l'host SQL, il nome utente e la password per più database?

1

Ho un progetto di grandi dimensioni con più server Web (uno per ogni client), un'applicazione (per tutti i client) e più database SQL (uno per ciascun client) come illustrato di seguito.

.

Per motivi di sicurezza ho bisogno di avere password e nomi utente separati. Come posso archiviare in modo sicuro le password ai server SQL sul server delle applicazioni? Potrei crittografare l'host, il nome utente e la password e mantenere la chiave sul server delle applicazioni, o sarebbe meglio memorizzare le password crittografate su un altro SQL Server? E dove dovrebbe essere conservata la chiave di crittografia?

    
posta Trevor 02.01.2017 - 17:46
fonte

2 risposte

1

Per prima cosa devi assicurarti di non affrontare un problema x-y, perché avere un database per utente dietro la stessa applicazione non è il progetto più comune. È molto più comune condividere il database e consentire all'applicazione di implementare la separazione dell'utente. Tra gli altri vantaggi, hai una sola connessione al database, che facilita enormemente la scalabilità e la manutenzione del database.

Se hai davvero bisogno di questo design, la mia scelta preferita sarebbe quella di lasciare la responsabilità della password agli utenti. Se è un'opzione, la password del database potrebbe essere semplicemente la password dell'utente web. In questo modo non è nemmeno necessario memorizzarlo e basta creare la connessione al database al momento del login e chiuderlo al logout (o alla fine della sessione web). In alternativa, è possibile ricavare una chiave da ogni singola password Web e utilizzarla per crittografare la password del database per ciascun utente se si desidera mantenerli separati = > il risultato è lo stesso, è necessaria la password Web che non si archivia, per accedere al database

Se nessuna di queste opzioni è accettabile, è necessario memorizzare le password in una forma invertibile sul server delle applicazioni, ma è un incubo per la sicurezza. Le tue opzioni sono:

  • non ti preoccupare affatto: archivia le password in chiaro e prega che nessuno possa mai accedere a quei dati - a sorpresa è un'opzione troppo comune (*) ...
  • non importa molto: come sopra ma cripta le password con una chiave fissa codificata nell'applicazione - un po 'meglio perché l'attaccante ora ha bisogno di due elementi ma uno di essi non può mai cambiare
  • fai del tuo meglio: crittografa le password con una chiave modificabile. Potrebbe essere letto dall'ambiente al momento del boot e cambiato su base regolare, ad esempio ogni mese per esempio. Ma ciò significa che quando si modifica la password principale è necessario modificare tutte le password del database in modo atomico - ok, qualsiasi database può farlo, ma beuhhh .... In alternativa è possibile simulare i vault della password e crittografare un intero file al costo che l'accesso a una singola password richiede una decrittazione completa, a meno che non si accetti di mantenere il database completo in testo in chiaro.

(*) ... ma può essere un'opzione accettabile se il server delle applicazioni e i server del database si trovano nella stessa zona di sicurezza .

    
risposta data 02.01.2017 - 18:42
fonte
0

Perché non prendere in considerazione l'archiviazione delle credenziali sul server web (client) stesso? Il server delle applicazioni funzionerà come un'interfaccia di inoltro dal server al client. Inoltre, eluderà il server delle applicazioni come un singolo punto di errore nel caso in cui l'host non funzioni o anche in caso di intrusione. Ciò aiuterebbe a liberare il server delle applicazioni dalla gestione delle chiavi e a spostarlo sul client, se non c'è intenzione di gestione delle chiavi sul server delle applicazioni.

    
risposta data 02.01.2017 - 18:52
fonte