Datenbank-Fehler durch falsche Benutzerrechte => Warum Rechtemanagement kein Nice-to-have ist – und wie ich sichere Konzepte entwickle

Wenn der Praktikant alle Daten löschen kann

„Zugriff ist Zugriff“ – höre ich oft.
Und dann wundert sich jemand, warum in der Tabelle Rechnungen plötzlich alles weg ist.
Oder warum die BI-Auswertung plötzlich #Zugriffsfehler ausgibt.

Meistens: Rechte falsch gesetzt.
Zu viel Zugriff.
Oder zu wenig.
Beides ist schlecht.

Ich zeige Dir, wie ich Rechte konzipiere, prüfe und durchsetze – ohne Schikane, aber mit Verstand.

Grundprinzip: Least Privilege

Jeder bekommt genau das, was er braucht.
Nicht mehr. Nicht weniger.

  • Buchhaltung darf buchen, nicht löschen
  • Lager darf aktualisieren, nicht einfügen
  • BI darf lesen, aber nicht schreiben
  • Entwickler haben temporäre Adminrechte – nie dauerhaft

Schritt 1: Benutzerrollen definieren

-- Beispielrollen in SQL Server
CREATE ROLE db_reader;
CREATE ROLE db_writer;
CREATE ROLE db_admin;
CREATE ROLE app_user_sales;
CREATE ROLE app_user_logistik;

Dann: Rechte zuweisen – nicht direkt an Benutzer, sondern an Rollen.

Schritt 2: Objektrechte gezielt vergeben

-- Lesen auf Tabelle Kunden
GRANT SELECT ON dbo.Kunden TO db_reader;

-- Schreiben auf Tabelle Bestellungen
GRANT INSERT, UPDATE ON dbo.Bestellungen TO db_writer;

-- Keine Rechte auf sensible Tabelle
DENY SELECT, INSERT, UPDATE, DELETE ON dbo.Personalakte TO db_reader;

Du brauchst klare Regeln.
Und kein GRANT ALL.

Schritt 3: Benutzer zu Rollen hinzufügen

-- Beispiel: Benutzerin Anna bekommt nur Leserechte
ALTER ROLE db_reader ADD MEMBER Anna;

-- Max darf alles im Lager
ALTER ROLE app_user_logistik ADD MEMBER Max;

So kannst Du neue Kolleg:innen zuweisen, ohne einzelne Objekte anfassen zu müssen.

Schritt 4: Rechtematrix dokumentieren

TabelleLeserechtSchreibrechtAdminrechte
KundenVertrieb, BIVertriebAdmin
RechnungenBuchhaltung, BIBuchhaltungAdmin
ArtikelAlleLogistik, EinkaufAdmin
BenutzerrollenAdmin

Dokumentation ist kein Selbstzweck.
Hilft bei Audits. Und wenn Du selbst 6 Monate später wieder ran musst.

Schritt 5: Rechte in Access umsetzen (Frontend)

Auch in Access kannst Du per VBA prüfen, was jemand darf.
Ich baue mir dazu ein kleines Modul.

Public Function HatRecht(strModul As String, strAktion As String) As Boolean
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT 1 FROM Benutzerrechte WHERE Loginname='" & Environ("USERNAME") & "' AND Modul='" & strModul & "' AND Aktion='" & strAktion & "'")
    HatRecht = Not rs.EOF
End Function

Dann bei Buttonklick:

Private Sub btnLoeschen_Click()
    If Not HatRecht("Artikel", "Loeschen") Then
        MsgBox "Du darfst das nicht.", vbExclamation
        Exit Sub
    End If

    ' Löschen durchführen
End Sub

Kein Wildwuchs. Klare Kontrolle.

Schritt 6: Monitoring nicht vergessen

-- Wer hat Zugriff auf was?
SELECT 
    dp.name AS Principal, 
    dp.type_desc, 
    o.name AS Object, 
    p.permission_name
FROM sys.database_permissions p
JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
LEFT JOIN sys.objects o ON p.major_id = o.object_id
ORDER BY dp.name, o.name;

Damit siehst Du auf einen Blick, was falsch gelaufen ist.
Und kannst aufräumen.

Tabelle: Typische Fehler – und bessere Lösung

ProblemBesser so
Rechte direkt auf User vergebenRollen verwenden
GRANT ALLNur benötigte Rechte setzen
Jeder darf alles in AccessRechte prüfen per Benutzerrolle
SQL-Logins ohne KontrolleNur Windows Auth oder Azure AD
Keine Übersicht über BerechtigungenRechtematrix und Reporting-Query

Mein Setup für sicheres Rechtemanagement

BereichUmsetzung
Benutzerverwaltungüber AD-Gruppen + SQL-Rollen
Rechtevergabenur über Rollen, nie direkt
Dokuals Tabelle im Repo / Wiki
Access-Steuerungper VBA + Rechte-Tabelle
Audits2× jährlich SQL-Berechtigungen prüfen

Rechte sind wie Sicherheitsgurte.

Stören manchmal –
aber fehlen sie, wird’s teuer.

Wenn Du’s gleich richtig machst,
sparst Du Dir viele Stunden Chaosreparatur.
Und kannst nachts ruhig schlafen.
Auch wenn ein Praktikant versehentlich DELETE * drückt.

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert