Configurar SQL Server Audit: inicios de sesión, cambios de permisos y acceso a tablas
SQL ServerSeguridadComando
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;Qué hace
Crea un server audit que escribe a archivo; registra en todo el servidor los inicios de sesión fallidos, la pertenencia a roles y los cambios de principals y permisos, y a nivel de base de datos el acceso SELECT/DML a una tabla elegida; lee los registros con T-SQL.
Cuándo usarlo
Para requisitos de auditoría/cumplimiento (GDPR, PCI, SOX), para preguntas de "quién leyó/cambió esta tabla" o cuando se sospecha una escalada de privilegios.
Precaución
Auditar SELECT en una tabla con mucho uso genera registros muy rápido y cuesta rendimiento; acótelo por objeto y principal. ON_FAILURE = SHUTDOWN detiene el servidor cuando no se puede escribir la auditoría; úselo solo cuando sea obligatorio. La carpeta de auditoría debe tener permiso de escritura para la cuenta de servicio de SQL Server y no debe poder borrarla nadie que no sea DBA. event_time está en UTC. Una database audit specification se restaura con la base de datos, pero queda huérfana si el GUID del server audit no coincide.
Relacionado
- Configurar TDE: master key, certificado, backup del certificado y progreso del cifrado
- Encontrar usuarios huérfanos y volver a asociarlos a logins (tras restore / AG)
- Auditoría de logins y permisos: miembros de sysadmin, permisos de riesgo, contraseñas débiles
- Crear una tabla ledger, leer su historial de cambios y verificar la integridad