Datenbanken designen
Der erste Schritt liegt immer im Erstellen der Datenbank, außer Sie wollen
eine bereits existierende Dritter verwenden. Ist eine Datenbank erstellt,
ist sie einem Eigentümer zugewiesen, welcher das Kommando zum Erstellen
ausgeführt hat. Gewöhnlich kann nur der Eigentümer (oder ein Superuser)
alles mit den Objekten in dieser Datenbank machen, und um anderen Benutzern
die Verwendung zu erlauben, müssen Rechte vergeben werden.
Applikationen sollten sich mit der Datenbank nie als deren Eigentümer
oder als ein Superuser verbinden, da diese Benutzer jede gewollte Abfrage
ausführen können, um z.B. das Schema zu modifizieren (z.B. Tabellen
löschen) oder den gesamten Inhalt löschen.
Sie können verschiedene Datenbanknutzer mit sehr limitierten Rechten auf
Datenbankobjekte für jeden Aspekt Ihrer Applikation anlegen. Nur die
wirklich benötigten Rechte sollten gewährt werden, und vermeiden Sie, dass
der gleiche Benutzer in verschiedenen Anwendungsfällen mit der Datenbank
interagieren kann. Das heißt, dass Eindringlinge, welche unter Verwendung
einer dieser Referenzen Zugriff auf Ihre Datenbank erlangt haben, nur so
viele Änderungen durchführen können, wie es Ihre Applikation kann.
Implementieren Sie nicht alle Geschäftslogik in die Webapplikation (z.B.
Ihr Skript), sondern tun Sie das im Datenbankschema unter Verwendung von
Sichten, Triggern, oder Regeln. Wenn sich das System entwickelt, werden
neu zu öffnende Ports zu der Datenbank vorgesehen, und Sie müssen die
Logik in jedem Datenbank-Client neu implementieren. Überdies können
Trigger verwendet werden, um transparent und automatisch mit Feldern
umzugehen, welche beim debuggen Ihrer Applikation oder beim
Zurückverfolgen von Transaktionen oft einen Einblick gewähren.
Anonymous ¶1 year ago
"You are encouraged not to implement all the business logic in the web application (i.e. your script), instead do it in the database schema using views, triggers or rules. If the system evolves, new ports will be intended to open to the database, and you have to re-implement the logic in each separate database client."
This doesn't make sense to me. I might be misreading it, but I can't see how this adds to security. It sounds like implementing business logic in the database just increases the amount of work you have to do if you ever want to upgrade or change your SQL database.