CodeGym /Kurse /SQL SELF /Zugriffsverwaltung und Sicherheit

Zugriffsverwaltung und Sicherheit

SQL SELF
Level 47, Lektion 0
Verfügbar

Stell dir mal einen echten Albtraum vor: Du bist Datenbank-Admin und plötzlich verschwindet eine wichtige Kundendaten-Tabelle einfach so. Wer war das? Warum? Vielleicht war’s ein unerfahrener Praktikant, der aus Versehen DROP TABLE getippt hat. Oder ein böswilliger User, der Zugang zur DB hatte... Egal was es war, jetzt ist es zu spät zum Panikschieben! Zeit aufzuwachen, durchzuatmen und sich mit Datenbanksicherheit zu beschäftigen. Denn eine Datenbank ohne Security ist wie ein Haus ohne Fundament.

Für Datenbanken muss der Schutz wirklich top sein, damit solche Bedrohungen verhindert werden wie:

  • Unbefugter Zugriff: Jemand bekommt Zugriff auf Daten, für die er keine Rechte hat.
  • Datenleck: Passwörter, Kreditkarten oder vertrauliche Infos landen in den falschen Händen.
  • SQL-Injections: Fiese Methode, mit der ein Angreifer über schlecht abgesicherte Queries deine DB manipulieren kann.
  • Menschliche Fehler: Aus Versehen Daten gelöscht oder Änderungen gemacht, die man nicht rückgängig machen kann.

In PostgreSQL gibt’s Security auf mehreren Ebenen: von Rollen und Rechteverwaltung bis zu Netzwerkzugriffsbeschränkungen. Damit kannst du flexibel einstellen, wer was mit deinen Daten machen darf.

Die wichtigsten Sicherheits-Ebenen in PostgreSQL

In PostgreSQL gibt es drei Haupt-Ebenen, auf denen du den Zugriff steuern kannst:

1. Zugriffsverwaltung auf Datenbank-Ebene. Hier entscheidest du, wer sich überhaupt mit deiner Datenbank verbinden darf und was ein User machen kann, wenn er drin ist. Zum Beispiel kannst du manchen Usern den Zugang komplett verbieten. Anderen erlaubst du nur das Lesen von Daten. Das wichtigste Tool dafür sind Rollen.

2. Zugriffskontrolle auf Tabellen-, Zeilen- und Spaltenebene.

In PostgreSQL kannst du den Zugriff auf Daten sehr fein steuern. Du kannst:

  • Einem User erlauben, nur bestimmte Spalten zu lesen.
  • Erlauben, Daten in einer Tabelle nur zu lesen, wenn der User der Besitzer der Zeile ist. Das nennt sich ROW LEVEL SECURITY (RLS) und wir schauen uns das in den nächsten Vorlesungen genauer an.
  • Den Zugriff nur auf bestimmte Bereiche der DB (Schemas) beschränken, in denen wichtige Daten liegen.

3. Netzwerkzugriff konfigurieren. Die Datenbank kann so eingestellt werden, dass sie nur Anfragen von vertrauenswürdigen Clients annimmt. Das wird über die PostgreSQL-Konfigurationsdatei pg_hba.conf geregelt. Damit kannst du z.B. nur Verbindungen vom lokalen Rechner oder bestimmten IP-Adressen erlauben.

Sicherheits-Tools in PostgreSQL

Schauen wir uns mal an, welche Security-Features PostgreSQL bietet und wie die in der Praxis funktionieren.

Wir starten mit Rollen und Privilegien – das ist das Herzstück der Zugriffsverwaltung. In PostgreSQL ist eine Rolle nicht einfach nur ein User, sondern viel flexibler. Sie kann eine einzelne Person oder eine ganze Gruppe repräsentieren. Zum Beispiel kannst du eine Rolle namens manager anlegen, die vollen Zugriff auf die Bestell-Tabelle hat, und für den Praktikanten passt die Rolle intern, die nur Leserechte hat – damit er nichts aus Versehen kaputt macht.

Die Rollen kannst du ziemlich flexibel einstellen: Manche bekommen mehr Rechte, andere weniger, und du kannst sogar erlauben, dass eine Rolle die Rechte einer anderen erbt. Darüber wird festgelegt, wer sich mit der DB verbinden darf, welche Schemas und Tabellen zugänglich sind und sogar, welche Zeilen man sehen oder ändern kann.

Dann gibt’s noch Konfigurationsdateien. In PostgreSQL gibt es zwei wichtige Konfigurationsdateien, die für die Sicherheit eine große Rolle spielen.

Die erste ist pg_hba.conf. Sie regelt den Netzwerkzugriff auf die Datenbank. Hier stellst du ein, wer sich überhaupt mit dem Server verbinden darf, von welcher IP-Adresse und wie die Authentifizierung abläuft. Wenn du den Zugriff nur für bestimmte Rechner oder User erlauben willst – das machst du genau hier.

Die zweite Datei ist postgresql.conf. Sie steuert die allgemeinen Server-Einstellungen, und unter anderem werden hier Logging- und Audit-Parameter gesetzt. Damit kannst du nachvollziehen, wer was gemacht hat, verdächtige Aktivitäten rechtzeitig bemerken und bei Bedarf ins Detail gehen.

Und dann noch Logging und Audit. "Logs sind dein bester Freund." Klingt komisch, aber für einen Datenbank-Admin ist das Regel Nummer eins. In PostgreSQL kannst du das Logging aller Queries und User-Aktionen aktivieren. Das hilft dir rauszufinden, wer was mit der DB gemacht hat, wenn mal was schiefgeht.

Beispiel: Schutz vor SQL-Injections

SQL-Injections sind eine der beliebtesten Angriffsarten auf Datenbanken. Und davor musst du dich echt schützen können. Stell dir vor, du hast eine App, in der der User seine Account-ID eingibt, um sein Profil zu sehen. Und die App macht dann so einen Query:

SELECT * FROM users WHERE id = 123;

Aber was, wenn der User 123 OR 1=1 statt einer Zahl eingibt? Dann wird der Query zu sowas wie:

SELECT * FROM users WHERE id = 123 OR 1=1;

Und statt einem Eintrag wird die ganze Tabelle users sichtbar.

Wie schützt man sich? PostgreSQL lässt dich parametrisierte Queries oder Prepared Statements (PREPARE und EXECUTE) nutzen, damit User-Daten nie mit SQL-Code vermischt werden. So sieht das aus:

PREPARE get_user_by_id (int) AS
SELECT * FROM users WHERE id = $1;

EXECUTE get_user_by_id(123);

Noch mehr echte Bedrohungsbeispiele

Damit du wirklich verstehst, warum Security wichtig ist, hier zwei echte Szenarien:

Beispiel 1: "Mitarbeiter hat ganze Tabelle gelöscht"

Irgendwann in irgendeiner Firma (eigentlich passiert das öfter und in vielen Firmen...) hat ein Praktikant aus Versehen in die Konsole getippt:

DROP TABLE employees;

Und 10 Jahre Mitarbeiterdaten waren futsch. Wie kann man das verhindern?

  • Verwalte die Rechte! Zum Beispiel darf die Rolle intern nur lesen.
  • Richte Audit ein! Die Logs zeigen, wer den fatalen Query abgesetzt hat.

Beispiel 2: "Datenleck durch unverschlüsselte Verbindung"

Wenn sich ein User ohne Verschlüsselung mit dem PostgreSQL-Server verbindet, können Login und Passwort von Angreifern abgefangen werden. Richte SSL ein und stell sicher, dass die Verbindungen geschützt sind.

Wichtige Aufgaben für Admins

Zum Abschluss dieses Intros hier die drei wichtigsten Aufgaben für jeden PostgreSQL-Admin:

  • Zugriffssteuerung. Stell sicher, dass nur berechtigte User bestimmte Aktionen machen dürfen.
  • Verschlüsselung. Vertrauliche Daten sollten immer verschlüsselt gespeichert und übertragen werden.
  • Monitoring. Richte Audit ein und beobachte verdächtige Aktivitäten in den Logs.

In den nächsten Vorlesungen lernst du, wie man Rollen anlegt, den Zugriff mit GRANT und REVOKE steuert, Zugriff auf Zeilenebene einrichtet und Verschlüsselung zum Schutz der Daten nutzt.

2
Aufgabe
SQL SELF, Level 47, Lektion 0
Gesperrt
Verwendung von pgAdmin zur Überwachung von Transaktionen
Verwendung von pgAdmin zur Überwachung von Transaktionen
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION