¡Hola, chicos!
¡Buenas noches!

En esta publicación, demostraré cómo crear auditorías de servidor (Server Audit) en SQL Server. Esta característica es muy interesante para auditar acciones DDL y/o DML (Especificación de auditoría de base de datos) realizadas por un usuario o aplicación o incluso la propia instancia (Especificación de auditoría del servidor).

Creación de una auditoría a través de la interfaz (GUI)

Abra SQL Server Management Studio, seleccione la categoría Seguridad > Auditorías > Haga clic derecho > Seleccione la opción “Nueva auditoría…”

SQL Server - Server Audit 2
SQL Server - Auditoría del servidor 2

Cuando configura la auditoría, los datos registrados se pueden guardar de 3 maneras:

  • Archivo: Se genera un archivo físico en el disco que contiene los datos recopilados por la auditoría.
  • Registro de seguridad: los datos recopilados por la auditoría se almacenan en el registro de seguridad del servidor.
  • Registro de aplicación: los datos recopilados por la auditoría se almacenan en el registro de aplicación del servidor.

En esta publicación, elegiré escribir en un archivo físico en el disco. Al seleccionar esta opción, también puedes especificar el nombre del archivo donde se guardará, el tamaño máximo y elegir si deseas reservar previamente este espacio máximo en el disco (es decir, si eliges el tamaño máximo de 10 GB, SQL Server ya creará este archivo con los 10 GB de espacio asignados)

SQL Server - Create Audit
SQL Server - Crear auditoría

Después de crear la Auditoría, debe habilitarla haciendo clic derecho sobre ella en el Explorador de objetos y luego seleccionando la opción "Habilitar auditoría"

SQL Server - Enable Audit
SQL Server: habilitar auditoría

SQL Server - Enable Audit 2
SQL Server: habilitar auditoría 2

Creación de una auditoría a nivel de servidor (Especificación de auditoría del servidor)

Ahora que se ha creado el objeto de auditoría, podemos crear el objeto de definición de auditoría (Especificación de auditoría del servidor).

Seleccione la instancia y seleccione la categoría Seguridad > Especificación de auditoría del servidor > Haga clic derecho > Seleccione la opción “Nueva especificación de auditoría del servidor”

SQL Server - Server Audit
SQL Server - Auditoría del servidor

En esta pantalla, puede definir lo que desea monitorear, como se muestra en la siguiente captura de pantalla:

SQL Server - Server Audit Specification
SQL Server: especificación de auditoría del servidor

Ver todos los tipos de auditorías a nivel de servidor

Nombre del grupo de acciones

Descripción

APLICACIÓN_ROLE_CHANGE_PASSWORD_GROUP

Este evento se genera cada vez que una función de la aplicación cambia una contraseña. equivalente a Contraseña de cambio de función de aplicación de auditoría de clase de evento.

AUDIT_CHANGE_GROUP

Este evento se genera cada vez que se crea, modifica o elimina una auditoría. Este evento se genera cada vez que se crea, modifica o elimina cualquier especificación de auditoría. Cualquier cambio en una auditoría se audita en esa auditoría. equivalente a Auditoría de cambio de clase de evento de auditoría.

BACKUP_RESTORE_GROUP

Este evento se genera cada vez que se emite un comando de copia de seguridad o restauración. equivalente a Auditar clase de evento de copia de seguridad/restauración.

BROKER_LOGIN_GROUP

Este evento se genera para informar mensajes de auditoría relacionados con la seguridad del transporte de Service Broker. equivalente a Clase de evento de inicio de sesión del agente de auditoría.

DATABASE_CHANGE_GROUP

Este evento se genera cuando se crea, modifica o elimina una base de datos. Este evento se genera cada vez que se crea, modifica o elimina una base de datos. equivalente a Clase de evento de gestión de bases de datos de auditoría.

DATABASE_MIRRORING_LOGIN_GROUP

Este evento se genera para informar mensajes de auditoría relacionados con la seguridad del transporte de duplicación de bases de datos. equivalente a Auditar clase de evento de inicio de sesión de duplicación de base de datos.

BASE_OBJECT_ACCESS_GROUP

Este evento se genera cada vez que se accede a objetos de la base de datos, como tipo de mensaje, ensamblado o contrato.

Se genera para cualquier acceso a cualquier base de datos.

Observación
Potencialmente, esto podría generar grandes registros de auditoría.

equivalente a Auditar clase de evento de acceso a objetos de base de datos.

BASE_OBJECT_CHANGE_GROUP

Este evento se genera cuando se ejecuta una instrucción CREATE, ALTER o DROP en objetos de base de datos, como esquemas. Se genera cada vez que se crea, cambia o elimina un objeto de base de datos.

Observación
Esto podría generar volúmenes muy grandes de registros de auditoría.

equivalente a Auditar clase de evento de gestión de objetos de base de datos.

DATABASE_OBJECT_OWNERSHIP_CHANGE_GROUP

Este evento se genera cuando hay un cambio de propietario para objetos dentro del alcance de la base de datos. Se genera para cualquier cambio de propiedad de objeto en cualquier base de datos del servidor. equivalente a Auditar clase de evento de toma de posesión de objeto de base de datos.

DATABASE_OBJECT_PERMISSION_CHANGE_GROUP

Este evento se genera cuando se emite GRANT, REVOKE o DENY para objetos de base de datos, como ensamblados y esquemas. Se genera para cualquier cambio de permiso de objeto en cualquier base de datos del servidor. equivalente a Auditar clase de evento GDR de objeto de base de datos.

GRUPO_OPERACIÓN_BASE_DATOS

Este evento se genera cuando se producen operaciones en una base de datos, como un punto de control o una notificación de consulta de suscripción. Este evento se genera en cualquier operación de base de datos en cualquier base de datos. equivalente a Clase de evento de operación de base de datos de auditoría.

DATABASE_OWNERSHIP_CHANGE_GROUP

Este evento se genera cuando se utiliza la instrucción ALTER AUTHORIZATION para cambiar el propietario de una base de datos y se verifican los permisos necesarios para hacerlo. Se genera para cualquier cambio de propiedad de la base de datos en cualquier base de datos del servidor. equivalente a Clase de evento Auditar cambio de propietario de base de datos.

DATABASE_PERMISSION_CHANGE_GROUP

Este evento se genera cada vez que se emite GRANT, REVOKE o DENY para un permiso de declaración por parte de cualquier entidad en SQL Server (esto se aplica a eventos solo de base de datos, como otorgar permisos en una base de datos, por ejemplo).

Este evento se genera para cualquier GDR (cambio de permiso de base de datos) de cualquier base de datos en el servidor. equivalente a Auditar el alcance de la base de datos Clase de evento GDR.

BASE_DATA_PRINCIPAL_CHANGE_GROUP

Este evento se genera cuando se crean, modifican o eliminan entidades, como usuarios, de una base de datos. equivalente a Clase de evento de gestión principal de base de datos de auditoría. (También es equivalente a la clase de evento Audit Add DB Principal, que ocurre en los procedimientos almacenados sp_grantdbaccess, sp_revokedbaccess, sp_addPrincipal y sp_dropPrincipal en desuso).

Este evento se genera cada vez que se agrega o elimina una función de base de datos mediante los procedimientos almacenados sp_addrole y sp_droprole. Este evento se genera cada vez que se crea, modifica o elimina una entidad de base de datos de cualquier base de datos. equivalente a Auditoría de clase de evento Agregar rol.

BASE_DATA_PRINCIPAL_IMPERSONATION_GROUP

Este evento se genera cuando hay una operación de suplantación en el ámbito de la base de datos, como EXECUTE AS o SETPRINCIPAL. Se genera para representaciones realizadas en cualquier base de datos. equivalente a Clase de evento de suplantación principal de base de datos de auditoría.

DATABASE_ROLE_MEMBER_CHANGE_GROUP

Este evento se genera cada vez que se agrega o elimina un inicio de sesión de una función de base de datos. Esta clase de evento se genera para los procedimientos almacenados sp_addrolemember, sp_changegroup y sp_droprolemember. Este evento se genera ante cualquier cambio en el miembro de la función de la base de datos en cualquier base de datos. equivalente a Auditoría Agregar miembro a la clase de evento de rol de base de datos.

DBCC_GROUP

Este evento se genera cada vez que una entidad emite un comando DBCC. equivalente a Auditar clase de evento DBCC.

FAILED_LOGIN_GROUP

Indica que una entidad intentó iniciar sesión en SQL Server y falló. Los eventos de esta clase se generan mediante conexiones nuevas o mediante conexiones reutilizadas de un grupo de conexiones. equivalente a Clase de evento fallido de inicio de sesión de auditoría.

FULLTEXT_GROUP

Indica que ocurrió un evento de texto completo. equivalente a Auditar clase de evento de texto completo.

LOGIN_CHANGE_PASSWORD_GROUP

Este evento se genera cada vez que la contraseña de inicio de sesión se cambia mediante la instrucción ALTER LOGIN o el procedimiento almacenado sp_password. equivalente a Evento Clase Auditoría Iniciar sesión Cambiar contraseña.

LOGUT_GROUP

Indica que una entidad ha cerrado sesión en SQL Server. Los eventos de esta clase se generan mediante conexiones nuevas o mediante conexiones reutilizadas de un grupo de conexiones. equivalente a Clase de evento de cierre de sesión de auditoría.

SCHEMA_OBJECT_ACCESS_GROUP

Este evento se genera cada vez que se utiliza un permiso de objeto en el esquema. equivalente a Clase de evento de acceso a objetos de esquema de auditoría.

SCHEMA_OBJECT_CHANGE_GROUP

Este evento se genera cuando se realiza una operación CREATE, ALTER o DROP en un esquema. equivalente a Clase de evento de gestión de objetos de esquema de auditoría.

Este evento se genera en objetos de esquema. equivalente a Clase de evento de permiso derivado de objeto de auditoría.

Este evento se genera cada vez que se cambia cualquier esquema de cualquier base de datos. equivalente a Clase de evento de permiso de declaración de auditoría.

SCHEMA_OBJECT_OWNERSHIP_CHANGE_GROUP

Este evento se genera cuando se verifican los permisos para cambiar el propietario del objeto de esquema (como una tabla, procedimiento o función). Esto ocurre cuando se utiliza la declaración ALTER AUTHORIZATION para asignar un propietario a un objeto. Este evento se genera para cualquier cambio de propiedad de esquema en cualquier base de datos del servidor. equivalente a Clase de evento de toma de posesión del objeto de esquema de auditoría.

SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP

Este evento se genera cada vez que se realiza una concesión, denegación o revocación en un objeto de esquema. equivalente a Objeto de esquema de auditoría Clase de evento GDR.

SERVER_OBJECT_CHANGE_GROUP

Este evento se genera para operaciones CREATE, ALTER o DROP en objetos del servidor. equivalente a Clase de evento de gestión de objetos del servidor de auditoría.

SERVER_OBJECT_OWNERSHIP_CHANGE_GROUP

Este evento se genera cuando el propietario cambia de objetos con ámbito de servidor. equivalente a Clase de evento de toma de posesión del objeto del servidor de auditoría.

SERVER_OBJECT_PERMISSION_CHANGE_GROUP

Este evento se genera cuando se emite GRANT, REVOKE o DENY para un permiso de objeto de servidor en cualquier entidad en SQL Server. equivalente a Clase de evento GDR del objeto del servidor de auditoría.

SERVIDOR_OPERACIÓN_GROUP

Este evento se genera cuando se utilizan operaciones de auditoría de seguridad, como cambiar configuraciones, recursos, acceso externo o autorización. equivalente a Clase de evento de operación del servidor de auditoría.

SERVER_PERMISSION_CHANGE_GROUP

Este evento se genera cuando se emite GRANT, REVOKE o DENY para permisos con ámbito de servidor, como la creación de un inicio de sesión. equivalente a Auditar la clase de evento GDR del alcance del servidor.

SERVER_PRINCIPAL_CHANGE_GROUP

Este evento se genera cuando se crean, modifican o eliminan entidades del servidor. equivalente a Clase de evento de administración principal del servidor de auditoría.

Este evento se genera cuando una entidad emite los procedimientos almacenados sp_defaultdb o sp_defaultlanguage o instrucciones ALTER LOGIN. equivalente a Auditar la clase de evento Addlogin.

Este evento se genera en los procedimientos almacenados sp_addlogin y sp_droplogin. También equivalente a Auditar clase de evento de cambio de propiedad de inicio de sesión.

Este evento se genera para los procedimientos almacenados sp_grantlogin, sp_revokelogin o sp_denylogin. equivalente a Auditar inicio de sesión Clase de evento GDR.

SERVER_PRINCIPAL_IMPERSONATION_GROUP

Este evento se genera cuando hay una suplantación dentro del alcance del servidor, como EXECUTE AS . equivalente a Clase de evento de suplantación de principal del servidor de auditoría.

SERVER_ROLE_MEMBER_CHANGE_GROUP

Este evento se genera cada vez que se agrega o elimina un inicio de sesión de una función de servidor fija. Este evento se genera para los procedimientos almacenados sp_addsrvrolemember y sp_dropsrvrolemember. equivalente a Auditoría Agregar inicio de sesión a la clase de evento de rol del servidor.

SERVER_STATE_CHANGE_GROUP

Este evento se genera cuando se modifica el estado del servicio SQL Server. equivalente a Auditar el servidor inicia y detiene la clase de evento.

SUCCESSFUL_LOGIN_GROUP

Indica que la entidad ha iniciado sesión correctamente en SQL Server. Los eventos de esta clase se generan mediante conexiones nuevas o mediante conexiones reutilizadas de un grupo de conexiones. equivalente a Clase de evento de inicio de sesión de auditoría.

TRACE_CHANGE_GROUP

Este evento se genera para todas las declaraciones que verifican el permiso ALTER TRACE. equivalente a Servidor de auditoría Modificar clase de evento de seguimiento.

Después de elegir los tipos de auditoría (en este ejemplo, quiero auditar la creación/eliminación de bases de datos), haga clic en Aceptar y habilite la especificación de auditoría:

SQL Server - Server Audit Specification Enable
SQL Server: habilitación de la especificación de auditoría del servidor

Crear una auditoría a nivel de base de datos (Especificación de auditoría de base de datos)

Una característica muy interesante que puede, en varias ocasiones, reemplazar el uso de activadores, es la creación de rutinas de auditoría a nivel de base de datos. En este ejemplo, crearé una auditoría para registrar los cambios realizados en una tabla específica.

Para crear una auditoría a nivel de base de datos, seleccione la instancia y luego la base de datos que será auditada, expanda la categoría Seguridad, seleccione la subcategoría Especificaciones de auditoría de base de datos, haga clic derecho y seleccione la opción “Nueva especificación de auditoría de base de datos”

SQL Server - Database Audit
SQL Server - Auditoría de base de datos

En esta pantalla podremos definir qué queremos auditar en esta base de datos.

SQL Server - Database New Audit
SQL Server: nueva auditoría de base de datos

SQL Server - Database Audit Specification
SQL Server: especificación de auditoría de base de datos

En la configuración anterior, la configuré para auditar las siguientes operaciones:
– BORRADOS realizados en la base de datos de Pruebas por el usuario “Usuario_Teste”
– INSERTs realizados en la tabla Clientes realizados por cualquier usuario.
– INSERTOS en cualquier objeto de esquema dbo, realizado por cualquier usuario.

Después de completar la configuración, recuerde activar la auditoría haciendo clic derecho sobre ella y seleccionando la opción “Habilitar especificación de auditoría de base de datos” y ¡su auditoría estará activada!

Ver los datos recopilados

Para ver los datos recopilados por la Auditoría, simplemente haga clic derecho en la Auditoría (no en la Especificación) y seleccione la opción "Ver registros de auditoría"

SQL Server - View Audit Logs
SQL Server: ver registros de auditoría

SQL Server - Database Audit Specification View Log
SQL Server: especificación de auditoría de base de datos Ver registro

Crear una auditoría a través de la línea de comando

Después de toda esta publicación que explica cómo crear auditorías de servidores y bases de datos usando las pantallas de SQL Server Management Studio, explicaré rápidamente cómo crear estas mismas auditorías a través de la línea de comandos, que es una forma mucho más práctica de replicar en múltiples servidores y mejora el conocimiento del DBA.

Con los comandos de abajo ya creo la auditoría (y la activo), la auditoría a nivel de servidor y base de datos (ambas ya activadas también).

USE [master]
GO

CREATE SERVER AUDIT [Auditoria_Arquivo]
TO FILE 
(	FILEPATH = N'C:\'
	,MAXSIZE = 100 MB
	,MAX_ROLLOVER_FILES = 2147483647
	,RESERVE_DISK_SPACE = OFF
)
WITH
(	QUEUE_DELAY = 1000
	,ON_FAILURE = CONTINUE
)
GO

ALTER SERVER AUDIT Auditoria_Arquivo WITH (STATE = ON)


CREATE SERVER AUDIT SPECIFICATION [Criação de Banco de Dados]
FOR SERVER AUDIT [Auditoria_Arquivo]
ADD (DATABASE_CHANGE_GROUP)
WITH (STATE = ON)
GO


USE [Testes]
GO

CREATE DATABASE AUDIT SPECIFICATION [Audita_DML]
FOR SERVER AUDIT [Auditoria_Arquivo]
ADD (DELETE ON DATABASE::[Testes] BY [Usuario_Teste]),
ADD (INSERT ON SCHEMA::[dbo] BY [public]),
ADD (INSERT ON OBJECT::[dbo].[Clientes] BY [public])
WITH (STATE = ON)
GO

Ver los registros

Usando consultas simples, podemos leer fácilmente los datos monitoreados y trabajar con esta información:

-- Retorna as informações de um arquivo específico
SELECT * 
FROM Sys.fn_get_audit_file('C:\Auditoria_Arquivo_75804C51-45C9-423C-B570-B24202AD13D3_0_130899437085570000.sqlaudit',default,default)  

-- Retorna as informações de todos os arquivos
SELECT event_time,action_id,server_principal_name,statement,* 
FROM Sys.fn_get_audit_file('C:\*.sqlaudit',default,default)

Y los datos mostrados se ven así:

SQL Server - View audit logs SQL Query
SQL Server: ver registros de auditoría Consulta SQL

¡Gracias y hasta la próxima!