Existe uma implementação padrão de um banco de dados de usuários?

14

Preciso implementar a funcionalidade básica personalizada do usuário no meu site. Existe uma estrutura padrão para bancos de dados desse tipo? Como é prática comum ter todas as informações e dados do usuário em uma única tabela, com cada usuário tendo sua própria linha ou essas informações devem ser divididas entre tabelas diferentes e vinculadas (talvez por eficiência?) Não estou muito preocupado com a segurança neste momento, mas obviamente desejarei ter criptografia de senha em pouco tempo.

Tentei encontrar o que procurava no google, mas sem sucesso. Deixe-me saber se a pergunta precisa de mais esclarecimentos ou algo assim.

cfrederich
fonte

Respostas:

17

Eu sugiro que você use padrões típicos de normalização. Um usuário por linha.

  • ID do usuário (incrementando bigint)
  • Nome comum do usuário (a ser exibido no site)
  • Endereço de email do usuário
  • Senha Salt (exclusivo para todos os usuários, inserido quando a conta é criada)
  • Senha (hash com sal - MD5 ou SHA1, sua preferência)
  • Data em que a conta foi criada

O resto é com você, de acordo com as regras de negócios.

Josh Bond
fonte
8

Vai ter que ir para uma grande moda antiga "depende".

Claro que você precisará de algum tipo de chave nesta tabela. Você pode começar com um UserID. Isso pode ser apenas um INT incremental (ou bigint, se você tiver mais de 2,1 milhões de usuários).

Vi muitos bancos de dados também usarem GUIDs como o principal UserID. Mas isso está abrindo uma lata de worms totalmente diferente usando GUIDs para PKs.

Você precisa decidir o quão normalizado deseja o seu banco de dados. Você permitirá que seu usuário tenha vários emails? vários números de telefone? Nesse caso, eles devem estar em uma tabela diferente.

Eu manteria a tabela principal do usuário para:

  • algum tipo de ID ou PK você pode usar
  • Nome / Sobrenome ou apenas um nome de usuário
  • algum tipo de status do usuário (ativo, desativado etc.) - (tinyint vinculando a uma tabela de status)
  • Data de criação

Esse deve ser o seu ponto de partida.

A partir daí, você pode adicionar outras colunas com base no que deseja armazenar. O email pode ser vinculado a uma tabela de email, o endereço a uma tabela de endereços etc. A senha pode usar hash + salt, mas você já considerou openids?

Eu recomendo que você leia este artigo - http://www.sqlservercentral.com/articles/data-modeling/71725/

SqlSandwiches
fonte
0

Se for sobre autenticação de usuários, eu usaria LDAP. Não crie um banco de dados separado para os usuários, se você já usa um banco de dados e possui outras tabelas (pedidos, produtos, etc.). Você pode querer ingressar nessas tabelas.


fonte