Ocasionalmente veo preguntas sobre cómo almacenar de forma segura las contraseñas de los usuarios para una aplicación web (usando un RDBMS, no estoy hablando de Facebook o Twitter). La respuesta habitual es "sal la contraseña, luego hash con un algoritmo fuerte como TDES o SHA512".
Mi pregunta es: como usuario de RDBMS, ¿por qué debería molestarme en absoluto porque la contraseña almacena problemas ya que la mayoría de los motores tienen un mecanismo de autenticación incorporado?
Por ejemplo, si algún usuario X desea crear una contraseña de usuario de cuenta Y en mi aplicación web, ¿cómo está emitiendo mal la siguiente consulta?
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Luego, dentro de mi aplicación, el usuario puede abrir una conexión a la base de datos usando sus credenciales y no tengo que preocuparme por la administración de contraseñas.
Veo múltiples ventajas para este método:
- Si el RDBMS decide que el algoritmo de cifrado necesita ser cambiado, no necesito tocar nada, solo para aplicar las actualizaciones de seguridad;
- Me resulta fácil gestionar las autorizaciones de los usuarios. Si un usuario es promovido a un rol de administrador, solo tengo que agregarlo al grupo correspondiente;
- Las inyecciones de SQL ahora no tienen sentido, ya que administro los permisos para permitir exactamente lo que quiero permitir a cada usuario en la base de datos (por ejemplo, en un foro como SO, agregar nuevas publicaciones, responder a las publicaciones, comentar y editar / eliminar sus propias preguntas / respuestas / comentarios);
- Se puede usar una cuenta de usuario "anónimo" para conexiones no autenticadas a mi aplicación;
- Cada usuario es el propietario de los datos que proporcionó.
Pero en prácticamente todas las preguntas que veo sobre este tema, parece haber un consenso general de que esta no es la forma en que se deben hacer las cosas. Mi pregunta es: ¿por qué?
Nota: El tercer punto está permitido por las políticas en PostgreSQL y las políticas de seguridad en Microsoft SQL Server. Me doy cuenta de que estos conceptos son nuevos, pero de todos modos, ahora que están aquí, ¿por qué la técnica que describo no se convierte en la forma estándar de manejar las cuentas de los usuarios?