¿Existe una implementación estándar de una base de datos de usuarios?

14

Necesito implementar una funcionalidad básica personalizada para mi sitio web. ¿Existe una estructura estándar para bases de datos de este tipo? Como es una práctica común tener toda la información y los datos del usuario en una sola tabla con cada usuario teniendo su propia fila, o esta información debería dividirse entre diferentes tablas y vincularse entre sí (¿tal vez por eficiencia?) No me preocupa mucho la seguridad en este punto, pero obviamente querré tener una encriptación de contraseña antes de demasiado tiempo.

Traté de encontrar lo que estaba buscando en google, pero fue en vano. Solo avíseme si la pregunta necesita más aclaraciones o algo.

cfrederich
fuente

Respuestas:

17

Le sugiero que utilice estándares de normalización típicos. Un usuario por fila.

  • ID de usuario (incrementando bigint)
  • Nombre común de usuario (se mostrará en el sitio)
  • Dirección de correo electrónico del usuario
  • Password Salt (único para cada usuario, insertado cuando se crea la cuenta)
  • Contraseña (Hashed con la sal - MD5 o SHA1, su preferencia)
  • Fecha de creación de la cuenta

El resto depende de usted, dadas sus reglas comerciales.

Josh Bond
fuente
Las opciones modernas de hashing de contraseñas serían argon2, bcrypt o scrypt.
douggard hace
8

Va a tener que ir por una gran y antigua moda "depende".

Por supuesto, necesitará algún tipo de clave en esta tabla. Puede comenzar con una ID de usuario. Esto podría ser un INT incremental (o bigint si va a tener más de 2.1 millones de usuarios).

He visto muchas bases de datos que también usan GUID como la ID de usuario principal. Pero eso está abriendo una lata completamente diferente de gusanos que usan GUID para PK.

Luego debe decidir qué tan normalizada desea su base de datos. ¿Vas a permitir que tu usuario tenga múltiples correos electrónicos? múltiples números de teléfono? Si es así, deberían estar en una mesa diferente.

Mantendría la tabla de usuario principal para:

  • algún tipo de identificación o PK que pueda usar
  • Nombre / Apellido o solo un nombre de usuario
  • algún tipo de estado del usuario (activo, deshabilitado, etc.) - (tinyint vincula a una tabla de estado)
  • Fecha de creación

Ese debería ser tu punto de partida.

Desde allí, puede agregar otras columnas según lo que desee almacenar. El correo electrónico podría vincularse a una tabla de correo electrónico, la dirección a una tabla de direcciones, etc. La contraseña podría usar hash + salt, pero ¿ha considerado openids?

Sin embargo, le recomiendo que lea este artículo: http://www.sqlservercentral.com/articles/data-modeling/71725/

SqlSandwiches
fuente
0

Si se trata de autenticación de usuarios, usaría LDAP. No cree una base de datos separada para los usuarios, si ya usa una base de datos y tiene otras tablas (pedidos, productos, etc.). Es posible que desee unirse a estas tablas.


fuente