SQL Server Audit einrichten: Logins, Berechtigungsänderungen und Tabellenzugriffe
SQL ServerSicherheitBefehl
USE master;
CREATE SERVER AUDIT [Audit_DBA]
TO FILE (FILEPATH = N'D:\Audit\', MAXSIZE = 256 MB, MAX_ROLLOVER_FILES = 20, RESERVE_DISK_SPACE = OFF)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [Audit_DBA] WITH (STATE = ON);
-- Server-wide (covers all databases):
CREATE SERVER AUDIT SPECIFICATION [AuditSpec_Server]
FOR SERVER AUDIT [Audit_DBA]
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP)
WITH (STATE = ON);
-- Database: access to a sensitive table:
USE [Musteri];
CREATE DATABASE AUDIT SPECIFICATION [AuditSpec_Musteri]
FOR SERVER AUDIT [Audit_DBA]
ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::[dbo].[Siparis] BY [public])
WITH (STATE = ON);
-- Read:
SELECT event_time, action_id, succeeded, server_principal_name, database_name,
schema_name, object_name, LEFT(statement, 200) AS stmt, client_ip, application_name
FROM sys.fn_get_audit_file(N'D:\Audit\Audit_DBA_*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time >= DATEADD(HOUR, -24, SYSUTCDATETIME())
ORDER BY event_time DESC;Was es tut
Legt ein Server Audit an, das in eine Datei schreibt; protokolliert serverweit fehlgeschlagene Logins, Rollenmitgliedschaften, Principal- und Berechtigungsänderungen sowie auf Datenbankebene SELECT-/DML-Zugriffe auf eine gewählte Tabelle und liest die Einträge per T-SQL aus.
Wann einsetzen
Für Audit-/Compliance-Anforderungen (DSGVO, PCI, SOX), für Fragen wie "wer hat diese Tabelle gelesen/geändert" oder bei Verdacht auf Privilege Escalation.
Vorsicht
SELECT-Auditing auf einer stark genutzten Tabelle erzeugt sehr schnell Einträge und kostet Performance; grenze es nach Objekt und Principal ein. ON_FAILURE = SHUTDOWN stoppt den Server, wenn das Audit nicht geschrieben werden kann; nur verwenden, wenn vorgeschrieben. Der Audit-Ordner muss für das Dienstkonto von SQL Server beschreibbar und für Nicht-DBAs nicht löschbar sein. event_time ist in UTC. Eine Database Audit Specification wird mit der Datenbank wiederhergestellt, bleibt aber verwaist, wenn die GUID des Server Audits nicht übereinstimmt.
Verwandte Einträge
- TDE einrichten: Master Key, Zertifikat, Zertifikatsbackup und Verschlüsselungsfortschritt
- Verwaiste Benutzer finden und Logins neu zuordnen (nach Restore / AG)
- Audit von Logins und Berechtigungen: sysadmin-Mitglieder, riskante Berechtigungen, schwache Passwörter
- Ledger-Tabelle anlegen, ihre Änderungshistorie lesen und die Integrität verifizieren