Ich habe vor all den Jahren damit gekämpft, also hier ist die Antwort, die ich mir gewünscht hätte:
Im Allgemeinen macht dies die Dinge zu kompliziert, und die Schlagzeilenantwort für eine einfache Anwendung lautet:Die Berechtigungen der Benutzer werden vom PHP-Code in den von Ihnen durchgeführten API-Aufrufen verwaltet, und ein DB-Benutzer ist in Ordnung. Alle Benutzer sollten es generell vermeiden, direkt mit der DB für App-Entwickler zu interagieren, um zu verhindern, dass die Unverletzlichkeit der Daten verletzt wird.
Es ist gut, über Sicherheit und Einschränkungen nachzudenken, aber Einfachheit ist König – je komplexer Sie es machen, desto schwieriger ist es zu warten und desto leichter ist es daher, Eckfälle zu übersehen.
Sollte ich einen neuen Datenbankbenutzer erstellen, wenn ich einen neuen Webbenutzer registriere?
Nein, Datenbankbenutzer werden durch ihre Berechtigungen unterschieden. Infolgedessen passen sich alle Benutzer einer Gruppe von Gruppen mit unterschiedlichen Berechtigungsstufen an. Die Datenbankkonten sind von den Webkonten getrennt – die Verbindung zur Datenbank erfolgt hinter den Kulissen und hat keine Verbindung zum verwendeten Webkonto.
Ein guter Ansatz wäre, für jeden Dienst, der sich direkt mit der DB verbindet, ein DB-Konto zu erstellen. Für die überwiegende Mehrheit wird dies ein Dienst sein, Ihr Webserver. Wenn die Anwendung wächst und isolierte Dienste wie Audits, Microservices, Sicherheit, IOT entstehen, sollten sie wahrscheinlich ihre eigenen Konten haben.
Sind CRUD-Privilegien sicher für alle Benutzer der Website?
Die Frage ist fehlgeleitet - Sie geben das CRUD an das DB-Konto, das es benötigen wird. Die in PHP verwalteten CRUD-Berechtigungen hängen wirklich von Ihrer App und den spezifischen Endpunkten ab. Zum Beispiel möchten Sie wahrscheinlich nicht, dass alle Ihre Benutzer Benutzerdatensätze löschen können, also sollte Ihr PHP-Code dies verhindern.
Wie viele verschiedene Arten von DB-Benutzern sollte es geben?
Die Anzahl hängt von Ihrer Datenbank ab. Im Allgemeinen gibt es 4 Gruppen
- Datenbankadministratoren
- Datenbankdesigner
- Gelegentliche Endnutzer
- Native Endnutzer
Wenn Sie jedoch Berechtigungen auf Tabellenebene erteilen möchten, müssen Sie möglicherweise etwas mehr verzweigen. Dies würde darauf hindeuten, dass 10 DB-Konten eine ziemlich kleine Menge sind, mehrere Hundert sind wahrscheinlicher .
Je mehr Privilegien, desto mehr Platz wird benötigt, aber das ist eine ziemlich kleine Überlegung und sollte keine große Rolle bei der Leistung spielen. Komplexität ist das nächste Problem – überlegen Sie genau, wie viele Gruppen und Permutationen Sie tatsächlich testen möchten. Im Fall der obigen Frage war ich ein einzelner Hobby-Entwickler - ein Konto als DBA ist wahrscheinlich in Ordnung. Wenn mehrere Benutzer direkt auf die Datenbank zugreifen (wahrscheinlich schon eine schlechte Idee für App-Entwickler), dann teilen Sie sie vielleicht mit unterschiedlichen Berechtigungen auf.
Über Berechtigungen auf Tabellenebene für eine einfache App zu sprechen, ist einfach zu viel des Guten!