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
Feature | Neu seit | Bemerkung |
---|---|---|
Ledger (Blockchain-Style) | 2022 | Manipulationssichere Tabellenstruktur |
Audit Filtering (WHERE-Klausel) | 2019 | gezielteres Audit Logging |
Audit an Azure Log Analytics | 2022 | zentrales Logging mit Power BI nutzbar |
SQL Audit auf TDE-DBs | 2022 | Auditing auch bei verschlüsselten DBs |
JSON-Format für Audits | 2022 | leichter 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
Zielsetzung | Audit-Feature |
---|---|
Allgemeiner Zugriff | Server Audit + DB-Spezifikation |
DSGVO-relevante Tabellen | Ledger-Tabelle |
Externe Angriffe | FAILED_LOGIN_GROUP + WHERE-Filter |
Zentrale Auswertung | Audit to Azure Log Analytics |
Nachvollziehbarkeit | JSON Audit Logs oder Log-Tabelle |
Mein Setup in KMU-Projekten
Bereich | Lösung |
---|---|
Login-Überwachung | Server Audit + Filter nach IP |
CRUD auf sensible Daten | Ledger-Tabellen mit SYSTEM_VERSIONING |
Audit-Log-Abfrage | Nachtjob mit fn_get_audit_file() |
DSGVO-Doku | Nachvollziehbarkeit + 12 Monate Logaufbewahrung |
Analyse | Power 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.
No responses yet