Dipende dalle dimensioni e dai requisiti del progetto.
Vedo un modo in cui i dati sugli utenti possono essere divisi in due set, con scopi diversi e quindi requisiti:
- Dati identificativi: nome utente, hash password, indirizzo e-mail, ora dell'ultimo accesso, ecc.
- Dati del profilo utente, che includono le preferenze degli utenti, le ultime attività, gli aggiornamenti di stato ecc.
Si noti che ci sono alcuni attributi sull'utente che possono rientrare in entrambe le categorie (ad es. Data di nascita dell'utente). La differenza tra questi due set è che il primo è strettamente controllato e solo attraverso determinati flussi di lavoro può essere modificato. Ad esempio, la modifica di una password potrebbe richiedere la fornitura di password esistente, la modifica dell'email potrebbe richiedere la verifica dell'email e verrà utilizzata nel caso in cui l'utente dimentichi la password.
Le preferenze non richiedono tali ACL e potrebbero teoricamente essere modificate dall'utente o da un'altra applicazione fintanto che l'utente lo acconsente. La posta in gioco è bassa se un'applicazione maliziosamente o a causa di un bug corrompe i dati o tenta di modificarli (presupponendo che vengano prese altre misure di sicurezza.) Tuttavia, di solito sarebbe disastroso se si potesse modificare il nome utente, la password o l'e-mail poiché possono essere utilizzati per assumere l'identità dell'utente o negare il servizio o causare costi di supporto ecc. per l'amministratore.
Pertanto, di solito i dati vengono archiviati in due tipi di sistemi:
- I dati di identità in genere vanno in una directory o in una soluzione IAM.
- I dati sulle preferenze finiranno in un database.
Detto questo, in pratica, le persone violeranno queste regole e useranno l'una o l'altra (es. Server SQL dietro il provider di appartenenze ASP.NET).
Man mano che i dati di identità diventano più grandi o l'organizzazione che li utilizza diventa più grande, si insinuano diversi tipi di problemi. Ad esempio, nel caso della directory, tenterà di replicare immediatamente le modifiche della password a tutti i server in un ambiente multi-server. Tuttavia, le preferenze dell'utente richiedono solo un'eventuale coerenza. (FYI: Entrambe sono ottimizzazioni diverse del teorema di CAPS.)
Infine, le directory (in particolare le directory online / cloud) rilasceranno anche token di accesso per altre risorse utilizzando protocolli come OAUTH (ad esempio, considera Facebook, Google, Account Microsoft, ADFS), mentre un database non ha tale necessità. Un database supporterà join e strutture di query piuttosto complesse, di cui non è necessaria la directory.
Per ulteriori dettagli, potrebbero essere utili alcune ricerche sulla directory delle identità e sul database.
Alla fine si riduce a quali sono i tuoi scenari e dovrebbero essere in futuro, inclusa l'integrazione con terze parti (e ciò che stanno usando). Se si tratta di un progetto ben contenuto e sei sicuro di poter proteggere i dati di identità dell'utente e autenticarti correttamente, allora potresti scegliere il database. Altrimenti, potrebbe valere la pena indagare su una directory di identità.
Se scegli DB, IMO, l'utilizzo di un DB vs due finirà per ridurre il controllo degli accessi, sia per gli utenti che per le applicazioni.