Depende do tamanho e dos requisitos do seu projeto.
Eu posso ver uma maneira pela qual os dados sobre usuários podem ser divididos em dois conjuntos, com finalidades diferentes e, portanto, requisitos:
- Dados de identidade: nome de usuário, hash da senha, endereço de e-mail, hora do último login, etc.
- Dados do perfil do usuário, que incluem preferências do usuário, atividade mais recente, atualizações de status etc.
Observe que existem alguns atributos sobre o usuário que podem se enquadrar em qualquer categoria (por exemplo, data de nascimento do usuário). A diferença entre esses dois conjuntos é que o primeiro é rigidamente controlado e somente através de certos fluxos de trabalho ele pode ser modificado. Por exemplo, alterar uma senha pode exigir o fornecimento de uma senha existente, alterar o email pode exigir a verificação do email e seria usado no caso de o usuário esquecer a senha.
As preferências não exigem essas ACLs e podem teoricamente ser modificadas pelo usuário ou por outro aplicativo, desde que o usuário consente. As apostas são baixas se um aplicativo maliciosamente ou devido a um bug corromper os dados ou tentar modificá-los (supondo que outras medidas de segurança sejam tomadas.) No entanto, normalmente seria desastroso se algum nome de usuário, senha ou email pudesse ser modificado pois eles podem ser usados para assumir a identidade do usuário ou negar serviço ou causar custos de suporte etc. para o administrador.
Assim, geralmente os dados são armazenados em dois tipos de sistemas:
- Os dados de identidade normalmente entram em um diretório ou em uma solução IAM.
- Os dados de preferência terminarão em um banco de dados.
Dito isto, na prática, as pessoas violarão essas regras e usarão uma ou outra (por exemplo, servidor SQL por trás do provedor de associação do ASP.NET).
À medida que os dados de identidade se tornam maiores ou a organização que os utiliza se torna maior, surgem diferentes tipos de problemas. Por exemplo, no caso de diretório, ele tenta replicar as alterações de senha imediatamente para todos os servidores em um ambiente com vários servidores. No entanto, a preferência do usuário exige apenas consistência eventual. (FYI: Ambas são otimizações diferentes do teorema do CAPS.)
Por fim, os diretórios (especialmente os diretórios on-line / nuvem) também emitem tokens de acesso para outros recursos usando protocolos como OAUTH (por exemplo, considere Facebook, Google, Microsoft Account, ADFS), enquanto um banco de dados não tem essa necessidade. Um banco de dados suportará junções e estruturas de consulta bastante complexas, cujo diretório não precisa.
Para mais detalhes, algumas pesquisas no diretório de identidade versus banco de dados ajudariam.
Eventualmente, tudo se resume ao que seus cenários são e espera-se que sejam no futuro, incluindo a integração com terceiros (e com o que eles estão usando). Se for um projeto bem contido e você tiver certeza de que pode proteger os dados de identidade do usuário e se autenticar corretamente, poderá procurar o banco de dados. Caso contrário, pode valer a pena investigar um diretório de identidade.
Se você optar pelo DB, IMO, o uso de um banco de dados vs dois acabaria descendo para o controle de acesso, tanto para usuários quanto para aplicativos.