Ich sehe gelegentlich Fragen, wie Benutzerkennwörter für eine Webanwendung sicher gespeichert werden können (mit einem RDBMS spreche ich nicht von Facebook oder Twitter). Die übliche Antwort lautet "Salt das Passwort, dann Hash es mit einem starken Algorithmus wie TDES oder SHA512".
Meine Frage lautet: Warum sollte ich mich als RDBMS-Benutzer überhaupt mit der problematischen Speicherung von Passwörtern beschäftigen, da die meisten Engines über einen integrierten Authentifizierungsmechanismus verfügen?
Wenn beispielsweise ein Benutzer X in meiner Webanwendung ein Kontonutzerkennwort Y erstellen möchte, wie wird die folgende Abfrage falsch ausgegeben:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Dann kann der Benutzer in meiner Anwendung mit seinen Anmeldeinformationen eine Verbindung zur Datenbank herstellen, und ich muss mich überhaupt nicht um die Kennwortverwaltung kümmern.
Ich sehe mehrere Vorteile dieser Methode:
- Wenn das RDBMS entscheidet, dass der Verschlüsselungsalgorithmus geändert werden muss, muss ich nichts anfassen, nur um die Sicherheitsupdates anzuwenden.
- Es ist für mich einfach, die Benutzerberechtigungen zu verwalten. Wenn ein Benutzer in die Rolle eines Administrators befördert wird, muss ich den Benutzer nur der entsprechenden Gruppe hinzufügen.
- SQL-Injektionen sind jetzt bedeutungslos, da ich Berechtigungen verwalte, um jedem Benutzer in der Datenbank genau das zu ermöglichen, was ich zulassen möchte (z. B. in einem Forum wie SO, Hinzufügen neuer Beiträge, Beantworten von Beiträgen, Kommentieren und Bearbeiten / Löschen seiner eigenen Fragen / Antworten / Kommentare);
- Ein Benutzerkonto "anonym" kann für nicht authentifizierte Verbindungen zu meiner Anwendung verwendet werden.
- Jeder Benutzer ist der Eigentümer der von ihm bereitgestellten Daten.
Aber bei praktisch jeder Frage, die ich zu diesem Thema sehe, scheint es einen allgemeinen Konsens zu geben, dass dies nicht die Art und Weise ist, wie Dinge getan werden müssen. Meine Frage ist: warum?
Hinweis: Der dritte Punkt wird von Richtlinien in PostgreSQL und Sicherheitsrichtlinien in Microsoft SQL Server zugelassen. Mir ist klar, dass diese Konzepte Neulinge sind, aber warum wird die von mir beschriebene Technik nicht zur Standardmethode für den Umgang mit Benutzerkonten?