Sicherheitskonzepte für die Datenbank
Sicherheitskonzepte für die Datenbank ist ein wichtiges Thema, das bei den meisten Projekten oft zu kurz kommt. Der Auftraggeber geht davon aus, dass das System und dessen Daten sicher vor Hackern ist. Meistens ist er nicht bereit, für Sicherheit mehr Zeit und somit mehr Geld zu investieren. Das so ein Vorgehen vor allem bei sensiblen Daten falsch ist, ist sicher jedem Programmierer klar. Ob der Auftraggeber nun dafür zahlt oder nicht, schlussendlich ist der Programmierer Schuld, wenn das System nicht das bietet, was er sich vorstellt. Aus diesem Grund möchte ich mit diesem Artikel einige Sicherheitskonzepte vorstellen, damit jeder schnell und ohne großen Aufwand ein gewisses Maß an Sicherheit bieten kann.
Sicherheitskonzepte für die Datenbank
Eine Datenbank speichert Daten. Der Wert der meisten Webapplikationen wird über dessen gesammlte Daten bestimmt. Kommen diese in falsche Hände ist Feuer am Dach! Sicherheitskonzepte für die Datenbank sind wichtig und für die meisten Projekte von essentieller Bedeutung. Es ist leicht im Nachhinein einem unachtsamen Administrator die Schuld in die Schuhe zu schieben. Die Verantwortung ist aber bereits bei der Planung und der Ausarbeitung eines Angebots zu suchen. Jede neue Applikation benötigt im Hintergrund ein Konzept in dem auch die Sicherheit der relevanten Daten eine Rolle spielen muss.
Default/Kein Passwort
Den größten Fehler den ein Programmierer oder Administrator machen kann ist es, einfach kein Passwort zu setzen. Je nach Datenbank kann es sein, dass hier bei der Installation bereits ein Benutzer mit allen Rechten angelegt wird und dieser mit einem Standardpasswort gesichert ist, oder auch gar kein Passwort besitzt.
Tipp 1: Setzte immer ein Passwort!
Hier muss man dazu sagen, dass aktuelle Systeme die Installation gar nicht durchführen, ohne Konfiguration eines Passworts. MySQL bietet hierfür einen eigenen Installationsschritt. Problematischer ist es, wenn man als Webadministrator zum Beispiel ein CMS System besitzt, dass automatisch eine Datenbank mit einem Standardpasswort anlegt.
Tipp 2: Verwende immer sichere Passwörter
Das ist die goldene Regel bei der Passwortvergabe. Man sollte nie Passwörter definieren, die ein Wort oder Zahlenkombination darstellen. Also nichts persönliches! Keine Geburtsdaten, Namen von Haustieren oder ähnliches. Wenn schon nicht für Benutzerkonten, so sollte man das zumindest bei Konten mit Administrationsrechten UNBEDINGT befolgen. Um so ein Passwort zu erzeugen eignen sich Passwortgeneratoren. Ich verwende selber gerne diesen hier. Um sich die ganzen Passwörter auch zu merken empfiehlt sich ein Programm, dass alle Passwörter sicher verwaltet. Dafür gibt es unzählige Angebote, einfach suchen! Mir gefällt Passpack sehr gut. Dort kann man auf einem Server seine Passwörter sicher lagern.
Anzahl der Benutzer
Datenbanken gibt es viele. Überall dort wo viele veränderliche Daten existieren, dort gibt es Datenbanken im Hintergrund. Nehmen wir meinem Blog als Beispiel. Der Inhalt ist fast vorwiegend in einer Datenbank gespeichert. Eine Webapplikation verwaltet dabei, welche Daten dem Benutzer angezeigt werden. Als Beispiel für solche Webapplikationen sind alle möglichen CMS Systeme (zum Beispiel Joomla) oder Blog Systeme (zum Beispiel WordPress) zu nennen. Diese liegen auf einem Webserver und verwenden eine Datenbank die vermutlich auf dem selben Server installiert ist.
Ein Benutzer
Die einfachste Vorgangsweise ist hier einfach bei der Installation der Webapplikation den Admin Benutzer der Datenbank samt Adminpasswort. Dabei wird vermutlich für jede Applikation eine eigene Tabelle erstellt. Damit sind wir eigentlich fertig und können mit dem Programm arbeiten. Aber Achtung:
Tipp 3: Der Admin Benutzer sollte nur der Administrator kennen
So sicher die meisten OpenSource CMS und Blog Systeme auch sind, es empfiehlt sich aber trotzdem diesen Systemen nicht Zugriff als Admin auf die Datenbank zu geben. Wozu sollte mein Blogsystem Rechte haben Datenbanken zu löschen die dem System gar nichts angehen? Es mach Sinn für jedes Programm einen eigenen Benutzer zu erstellen. Dieser Benutzer wird danach soweit eingeschränkt, dass er nur noch Zugriff auf die Datenbank der Applikation hat! Bei PHP Systemen gibt es dazu meistens eine config.php wo man die Datenbankparameter anpassen kann. Bei einer Sicherheitslücke kann so maximal die Datenbank des Systems zerstört werden.
Mehrere Benutzer
Umfangreiche Systeme erfordern oft, dass mehrere Benutzer gleichzeitig an der Datenbank arbeiten. Hier gilt folgendes:
Tipp 4: Benutzer haben individuelle Schreib- und Leserechte
Als Beispiel nehmen wir ein Buchhaltungssystem. Es gibt einen Benutzer für den Chef. Dieser will natürlich alles im Griff haben, jedoch geben wir ihm nur Leserechte auf alles. Wenn er selber nicht aktiv Änderungen vornehmen muss gibt es keinen Grund für Schreibrechte. Dann erstellen wir einen Benutzer für die Rechnungserstellung. Dieser darf zum Beispiel Tabellen für Rechnungen und Kunden lesen und schreiben, hat aber keinen Zugriff auf andere Tabelle (zum Beispiel Lagerbestand). Je nach Datenbanksystem kann man hier auch Benutzergruppen oder Benutzerrollen anlegen. Wichtig ist, alle Rechte schon bei der Konzeption der Datenbank anzulegen und zu dokumentieren.
Zugriffsbereich
Bei jeder Datenbank stellt sich von vornherein eine ganz wichtige Frage: „Wird die Datenbank nur von der eigenen Maschine aus benutzt, oder muss die Datenbank auch über das Netzwerk verfügbar sein?“
Lokale Datenbank
Auf den meisten Webservern laufen vermutlich lokale Datenbanken. Diese brauchen nur von der aktuellen Maschine erreichbar sein. Hier ist man eigentlich schon auf der sicheren Seite. Man hat einfachen Überblick über alle zugreifenden Programme. Attacken können maximal darüber, oder über das Server eigene Betriebssystem kommen.
Netzwerkdatenbank
In vielen Firmen gibt es eine zentrale Datenbank. Das heißt der Webserver muss seine Daten zum Beispiel von einem Datenbankserver holen. Hier kann der Netzwerkadministrator den Zugriff leicht über die IP Adresse und Ports steuern. Ein anderer Fall ist, wenn eine Datenbank auf einem Webserver zwar wie eine lokale Datenbank verwendet wird, diese aber auch für bestimmte Sachen von außen erreichbar sein muss. Man denke hier an einen Webshop, der von einer externen Quelle mit Daten aktualisiert ist. In diesem Fall sollte man das Tipp 4 verwenden, also mehrere Benutzer oder Benutzerrollen definieren. Zusätzlich dazu kann man:
Tipp 5: Benutzer für externen Zugriff freischalten
Benutzer kann man bei vielen Datenbanksystemen (zum Beispiel MySQL) auch für bestimmte externe Quellen oder überhaupt allen Quellen freischalten. Hier sollten man extrem aufpassen und lieber auf Nummer sicher gehen und diesen Benutzern möglichst eingeschränkte Reche geben.
Fazit
Sicherheit ist ein zentrales Thema in der heutigen IT Welt. Ein Sicherheitskonzept für die Datenbank gehört zu jedem wichtigen Projekt, vor allem wenn auch sensible Daten gespeichert werden. Es gibt nichts peinlicheres für eine Firma eingestehen zu müssen, dass ein Angreifer Daten gestohlen hat.
Wie kann man die Datenbank noch sicherer machen? Welche Probleme kennt ihr?