Czasami widzę pytania z pytaniem, jak bezpiecznie przechowywać hasła użytkownika do aplikacji internetowej (używając RDBMS, nie mówię o Facebooku ani Twitterze). Zazwyczaj odpowiedź brzmi: „zrób hasło, a następnie zahartuj je za pomocą silnego algorytmu, takiego jak TDES lub SHA512”.
Moje pytanie brzmi: jako użytkownik RDBMS, dlaczego miałbym w ogóle niepokoić się przechowywaniem haseł, ponieważ większość silników ma wbudowany mechanizm uwierzytelniania.
Na przykład, jeśli jakiś użytkownik X chce utworzyć hasło użytkownika do konta Y w mojej aplikacji internetowej, w jaki sposób wydaje się następujące zapytanie:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Następnie w mojej aplikacji użytkownik może otworzyć połączenie z bazą danych przy użyciu swoich poświadczeń i nie muszę się martwić zarządzaniem hasłami.
Widzę wiele zalet tej metody:
- Jeśli RDBMS zdecyduje, że algorytm szyfrowania musi zostać zmieniony, nie muszę niczego dotykać, aby zastosować aktualizacje zabezpieczeń;
- Łatwo jest mi zarządzać autoryzacjami użytkowników. Jeśli użytkownik zostanie awansowany do roli administratora, muszę tylko dodać użytkownika do odpowiedniej grupy;
- Zastrzyki SQL są teraz bez znaczenia, ponieważ zarządzam uprawnieniami, aby zezwalać dokładnie na to, co chcę, każdemu użytkownikowi w bazie danych (na przykład na forum takim jak SO, dodając nowe posty, odpowiadając na posty, komentując i edytując / usuwając własne pytania / odpowiedzi / komentarze);
- Konto użytkownika „anonimowe” może być używane do nieuwierzytelnionych połączeń z moją aplikacją;
- Każdy użytkownik jest właścicielem podanych przez siebie danych.
Ale praktycznie w każdym pytaniu, jakie widzę na ten temat, wydaje się, że panuje ogólna zgoda co do tego, że nie w ten sposób należy to robić. Moje pytanie brzmi: dlaczego?
Uwaga: Trzeci punkt jest dozwolony przez zasady w PostgreSQL i zasady bezpieczeństwa w Microsoft SQL Server. Zdaję sobie sprawę, że te koncepcje są nowicjuszami, ale zresztą, skoro już są, dlaczego opisana przeze mnie technika nie staje się standardowym sposobem obsługi kont użytkowników?