Tartarughe fino in fondo è un bel discorso che tratta questo argomento.
In breve, non ci sono grandi soluzioni, perché se memorizzi la password nel database da qualche parte, devi autenticarti in che in qualche modo, il che ti lascia indietro dove hai iniziato. Tuttavia, ci sono alcune opzioni che riducono il rischio.
Le soluzioni più comuni consistono nel memorizzare la password in un file non tracciato o in una variabile di ambiente sul server. Ciò impedisce una perdita del codice sorgente dall'esporre la password, ma qualcuno che ha accesso al tuo server sarà comunque in grado di vederlo. Puoi anche utilizzare i sistemi che codificano le password in un file che viene quindi memorizzato nel controllo di versione, che offre tutti i vantaggi di un VCS, ma questo cade su problemi simili.
Personalmente, mi piacciono i sistemi di gestione dei segreti come Hashicorp's Vault o Square's Keywhiz. Si tratta di sistemi che (di solito) vivono all'esterno del server e forniscono un'API per ottenere e impostare valori segreti. Mentre richiedono l'autenticazione, questa autenticazione può essere valori di sessione temporanei, simili ai cookie di sessione per i siti Web, che impediscono a un utente malintenzionato di ottenere l'accesso a lungo termine ai propri segreti, poiché la sessione che hanno rubato scadrà (in un momento configurabile ). In genere, questi sistemi includono anche i log di audit, quindi una volta individuata una violazione, puoi rintracciare da dove proviene.
La soluzione che ha più senso per la tua situazione particolare dipende molto dalle tue esigenze. Vault e gli amici sono eccellenti, ma introducono molta complessità operativa aggiuntiva, forse più dell'intero resto dell'applicazione. Dovrai valutare i compromessi per te stesso per vedere quale sarebbe una buona misura.