Dipende dalle dimensioni e dai requisiti del tuo progetto.
Riesco a vedere un modo in cui i dati sugli utenti possono essere suddivisi in due set, con scopi diversi e quindi requisiti:
- Dati di identità: nome utente, hash della password, indirizzo email, ultimo orario di accesso, ecc.
- Dati del profilo utente, che includono le preferenze degli utenti, l'ultima attività, gli aggiornamenti di stato ecc.
Si noti che ci sono alcuni attributi sull'utente che possono rientrare in entrambe le categorie (ad esempio la 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 della password esistente, la modifica dell'email potrebbe richiedere la verifica della posta elettronica e sarebbe utilizzata nel caso in cui l'utente dimenticasse la password.
Le preferenze non richiedono tali ACL e potrebbero teoricamente essere modificate dall'utente o da un'altra applicazione a condizione che l'utente le acconsenta. La posta in gioco è bassa se un'applicazione maliziosamente o a causa di un bug corrompe i dati o tenta di modificarli (supponendo che vengano prese altre misure di sicurezza.) Tuttavia, di solito sarebbe disastroso se qualcuno dei nomi utente, password o email potesse essere modificato dal momento che 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 sono memorizzati in due tipi di sistemi:
- I dati di identità normalmente entrano in una directory o in una soluzione IAM.
- I dati delle preferenze finiranno in un database.
Detto questo, in pratica, le persone violano queste regole e usano l'una o l'altra (ad esempio, il server SQL dietro il provider di appartenenze ASP.NET).
Man mano che i dati dell'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 multi-server ambiente. Tuttavia, la preferenza dell'utente richiede solo un'eventuale coerenza. (FYI: Entrambi questi sono diversi ottimizzazioni del teorema di CAPS.)
Infine, le directory (specialmente le directory online / cloud) invieranno anche token di accesso per altre risorse utilizzando protocolli come OAUTH (ad esempio, considerano Facebook, Google, Account Microsoft, ADFS), mentre un database non ha tale necessità. Un database supporterà join e struttura di query abbastanza complessi, di cui la directory non ha bisogno.
Per ulteriori dettagli, sarebbero utili alcune ricerche sulla directory delle identità e sul database.
Alla fine si riduce a quali sono i tuoi scenari e ci si aspetta che siano in futuro, inclusa l'integrazione con terze parti (e ciò che stanno usando). Se si tratta di un progetto ben contenuto e si è certi che è possibile proteggere i dati di identità degli utenti e autenticarsi correttamente, è possibile utilizzare il database. Altrimenti potrebbe valere la pena investigare su una directory di identità.
Se si va su DB, IMO, usando un DB contro due verrebbe alla fine il controllo degli accessi, sia per gli utenti che per le applicazioni.