Wenn keiner mitloggt – aber plötzlich etwas gelöscht ist

Auditing war früher ein Zusatzthema.
Heute ist’s Pflicht.
Denn wenn Du nicht zeigen kannst, wer was wann gemacht hat,
wird’s bei DSGVO, GoBD und Sicherheitsvorfällen richtig unangenehm.

SQL Server hat die letzten Jahre ordentlich nachgelegt.
Ich zeig Dir, was neu ist – und wie ich’s einsetze.

Überblick: Neue Features ab SQL Server 2022

FeatureNeu seitBemerkung
Ledger (Blockchain-Style)2022Manipulationssichere Tabellenstruktur
Audit Filtering (WHERE-Klausel)2019gezielteres Audit Logging
Audit an Azure Log Analytics2022zentrales Logging mit Power BI nutzbar
SQL Audit auf TDE-DBs2022Auditing auch bei verschlüsselten DBs
JSON-Format für Audits2022leichter auswertbar

Schritt 1: SQL Server Audit aktivieren

Server-Audit definieren

CREATE SERVER AUDIT Audit_Produktion
TO FILE (
    FILEPATH = 'D:\AuditLogs\', 
    MAXSIZE = 100 MB, 
    MAX_ROLLOVER_FILES = 10
)
WITH (ON_FAILURE = CONTINUE);

Audit aktivieren:

ALTER SERVER AUDIT Audit_Produktion
WITH (STATE = ON);

Datenbank-Audit-Spezifikation anlegen

CREATE DATABASE AUDIT SPECIFICATION Audit_Login_Lesezugriff
FOR SERVER AUDIT Audit_Produktion
ADD (SELECT ON OBJECT::dbo.Kunden TO [public]),
ADD (UPDATE ON OBJECT::dbo.Kunden TO [public])
WITH (STATE = ON);

Jetzt wird geloggt, wenn jemand auf die Tabelle dbo.Kunden zugreift.

Schritt 2: Filter einsetzen (ab SQL Server 2019)

Du willst nur Logins auswerten, die von außen kommen?

CREATE SERVER AUDIT Audit_Extern
TO FILE (FILEPATH = 'D:\AuditLogs\')
WHERE client_ip != '192.168.0.1';

Oder nur fehlschlagende Logins:

ADD (FAILED_LOGIN_GROUP)
WHERE session_server_principal_name NOT LIKE 'sa';

Damit verhinderst Du Logging-Müll –
und findest die echten Probleme schneller.

Schritt 3: Ledger-Tabellen (ab SQL Server 2022)

Manipulationssichere Tabellenstruktur.

Beispiel: Ledger-Tabelle

CREATE LEDGER TABLE dbo.AuditKasse (
    KassenID INT PRIMARY KEY,
    Betrag DECIMAL(10,2),
    Benutzer NVARCHAR(100),
    Zeitpunkt DATETIME2
)
WITH (SYSTEM_VERSIONING = ON);

SQL führt intern Hash-Ketten.
Keine Änderungen ohne Nachweis möglich.
Ideal für Kassen, Abrechnung, Protokolle.

Abfrage der Historie:

SELECT *
FROM sys.database_ledger_transactions;

Schritt 4: Audit-Logs zentral speichern

Ab SQL Server 2022 kannst Du Logs direkt an Azure senden.

Voraussetzung: Azure Log Analytics Workspace.

CREATE SERVER AUDIT Audit_Azure
TO EXTERNAL_MONITOR;

Dann Auswertung z. B. mit Power BI, Sentinel oder eigener Query.

Schritt 5: Audit-Log abfragen

SELECT event_time,
       server_principal_name,
       action_id,
       statement,
       object_name
FROM sys.fn_get_audit_file('D:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
ORDER BY event_time DESC;

Das geht auch automatisiert – z. B. als nächtlicher Job in eine Log-Tabelle.

Beispiel: Einfacher Audit-Auslese-Job

INSERT INTO dbo.AuditAuswertung
SELECT event_time,
       server_principal_name,
       action_id,
       statement
FROM sys.fn_get_audit_file('D:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time > (SELECT ISNULL(MAX(event_time), '2000-01-01') FROM dbo.AuditAuswertung);

Tabelle: Was ich wann einsetze

ZielsetzungAudit-Feature
Allgemeiner ZugriffServer Audit + DB-Spezifikation
DSGVO-relevante TabellenLedger-Tabelle
Externe AngriffeFAILED_LOGIN_GROUP + WHERE-Filter
Zentrale AuswertungAudit to Azure Log Analytics
NachvollziehbarkeitJSON Audit Logs oder Log-Tabelle

Mein Setup in KMU-Projekten

BereichLösung
Login-ÜberwachungServer Audit + Filter nach IP
CRUD auf sensible DatenLedger-Tabellen mit SYSTEM_VERSIONING
Audit-Log-AbfrageNachtjob mit fn_get_audit_file()
DSGVO-DokuNachvollziehbarkeit + 12 Monate Logaufbewahrung
AnalysePower BI auf Log Analytics (wenn vorhanden)

Wenn Du nichts aufzeichnest, weißt Du nicht, was war.

Und in Zeiten von Compliance, Datenschutz und Ransomware ist das keine Option mehr.

SQL Server gibt Dir die Werkzeuge. Du musst sie nur auch einsetzen.

Tags:

No responses yet

Schreibe einen Kommentar

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