Esiste un'implementazione standard di un database utenti?


14

Devo implementare funzionalità utente personalizzate di base per il mio sito Web. Esiste una struttura standard per database di questo tipo? Come è pratica comune avere tutte le informazioni e i dati degli utenti in una singola tabella con ogni utente che ha la propria riga, o queste informazioni dovrebbero essere divise tra tabelle diverse e collegate tra loro (forse per efficienza?) Non sono tremendamente preoccupato per la sicurezza a questo punto, ma ovviamente vorrò avere la crittografia della password entro troppo tempo.

Ho cercato di trovare quello che cercavo su google, ma senza risultati. Fammi sapere se la domanda necessita di ulteriori chiarimenti o altro.

Risposte:


17

Ti suggerisco di utilizzare standard di normalizzazione tipici. Un utente per riga.

  • ID utente (incrementando bigint)
  • Nome comune dell'utente (da visualizzare sul sito)
  • Indirizzo e-mail dell'utente
  • Password Salt (unica per ogni utente, inserita al momento della creazione dell'account)
  • Password (tratteggiata con il sale - MD5 o SHA1, la tua preferenza)
  • Data di creazione dell'account

Il resto dipende da te date le tue regole commerciali.


8

Dovrà andare per una grande vecchia moda "dipende".

Ovviamente avrai bisogno di una sorta di chiave su questa tabella. È possibile iniziare con un ID utente. Questo potrebbe essere solo un INT incrementale (o bigint se hai intenzione di avere oltre 2,1 milioni di utenti).

Ho visto molti database usare anche i GUID come UserID principale. Ma questo sta aprendo una lattina completamente diversa di worm che utilizzano GUID per PK.

È quindi necessario decidere quanto si desidera normalizzare il database. Consentirai al tuo utente di avere più e-mail? più numeri di telefono? In tal caso, dovrebbero trovarsi in una tabella diversa.

Terrei la tabella utenti principale per:

  • una sorta di ID o PK che puoi usare
  • Nome / Cognome o solo un nome utente
  • una sorta di stato dell'utente (attivo, disabilitato, ecc.) - (collegamento minuscolo a una tabella di stato)
  • Data di Creazione

Questo dovrebbe essere il tuo punto di partenza.

Da lì è possibile aggiungere altre colonne in base a ciò che si desidera memorizzare. La posta elettronica potrebbe essere collegata a una tabella di posta elettronica, l'indirizzo a una tabella di indirizzi, ecc. La password potrebbe utilizzare hash + salt ma hai considerato openids?

Consiglio vivamente di leggere questo articolo però - http://www.sqlservercentral.com/articles/data-modeling/71725/


0

Se si tratta di autenticazione degli utenti, utilizzerei LDAP. Non creare un database separato per gli utenti, se si utilizza già un database e si dispone di altre tabelle (ordini, prodotti, ecc.). Potresti voler unirti a questi tavoli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.