Ocasionalmente, vejo perguntas perguntando como armazenar com segurança senhas de usuários para um aplicativo da Web (usando um RDBMS, não estou falando do Facebook ou Twitter). A resposta usual é "salte a senha e, em seguida, faça o hash com um algoritmo forte, como TDES ou SHA512".
Minha pergunta é: como usuário do RDBMS, por que eu deveria me preocupar com o armazenamento de senhas problemático, uma vez que a maioria dos mecanismos possui um mecanismo de autenticação interno.
Por exemplo, se algum usuário X quiser criar uma senha de usuário da conta Y no meu aplicativo da web, como está emitindo a seguinte consulta incorreta:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Então, dentro do meu aplicativo, o usuário pode abrir uma conexão com o banco de dados usando suas credenciais e não preciso me preocupar com o gerenciamento de senhas.
Vejo várias vantagens para esse método:
- Se o RDBMS decidir que o algoritmo de criptografia precisa ser alterado, não preciso tocar em nada, apenas para aplicar as atualizações de segurança;
- É fácil para mim gerenciar as autorizações dos usuários. Se um usuário é promovido para a função de administrador, basta adicionar o usuário ao grupo correspondente;
- As injeções de SQL agora não têm sentido, pois eu gerencio permissões para permitir exatamente o que eu quero permitir para cada usuário no banco de dados (por exemplo, em um fórum como SO, adicionar novas postagens, responder a postagens, comentar e editar / excluir suas próprias perguntas / respostas / comentários);
- Uma conta de usuário "anônima" pode ser usada para conexões não autenticadas ao meu aplicativo;
- Cada usuário é o proprietário dos dados que ele forneceu.
Mas em praticamente todas as perguntas que vejo sobre esse tópico, parece haver um consenso geral de que não é assim que as coisas devem ser feitas. Minha pergunta é: por que?
Nota: O terceiro ponto é permitido pelas políticas no PostgreSQL e pelas políticas de segurança no Microsoft SQL Server. Percebo que esses conceitos são novos, mas enfim, agora que eles estão aqui, por que a técnica que descrevo não se torna a maneira padrão de lidar com as contas de usuários?