CREAR AUDITORÍA DE SERVIDOR (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Crea un objeto de auditoría de servidor mediante SQL Server Audit. Para más información, consulte SQL Server Audit (motor de base de datos).

Convenciones de sintaxis de Transact-SQL

Syntax

CREATE SERVER AUDIT audit_name
{
    TO {
        [ FILE ( <file_options> [ ,... n ] ) ]
        | APPLICATION_LOG
        | SECURITY_LOG
        | URL
        | EXTERNAL_MONITOR
    }
    [ WITH ( <audit_options> [ ,... n ] ) ]
    [ WHERE <predicate_expression> ]
}
[ ; ]

<file_options> ::=
{
    FILEPATH = 'os_file_path'
    [ , MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
    [ , { MAX_ROLLOVER_FILES = { integer | UNLIMITED } } | { MAX_FILES = integer } ]
    [ , RESERVE_DISK_SPACE = { ON | OFF } ]
}

<audit_options> ::=
{
    [ QUEUE_DELAY = integer ]
    [ , ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION } ]
    [ , AUDIT_GUID = uniqueidentifier ]
    [ , OPERATOR_AUDIT = { ON | OFF } ]
    [ , RETENTION_DAYS = integer ]
}

<predicate_expression> ::=
    { [ NOT ] <predicate_factor>
    [ { AND | OR } [ NOT ] { <predicate_factor> } ] [ ,... n ] }

<predicate_factor> ::=
    event_field_name { = | < > | != | > | >= | < | <= | LIKE }
    { number | 'string' }

Arguments

audit_name

Nombre de la auditoría. SQL Server 2019 (15.x) y versiones anteriores no pueden contener espacios en el nombre de auditoría.

A { ARCHIVO | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }

Determina la ubicación del destino de la auditoría. Las opciones son un archivo binario, el registro de aplicaciones de Windows o el registro de seguridad de Windows. SQL Server no puede escribir en el registro de seguridad de Windows sin configurar opciones adicionales en Windows. Para obtener más información, vea Escribir eventos de auditoría de SQL Server en el registro de seguridad.

El objetivo URL no es compatible con SQL Server.

Important

En Azure SQL Managed Instance, la auditoría de SQL funciona en el nivel de servidor. Las ubicaciones solo pueden ser URL o EXTERNAL_MONITOR.

RUTA DE ARCHIVO = 'os_file_path'

La ruta de acceso del registro de auditoría. El nombre de archivo se genera en función del nombre de la auditoría y del GUID de la auditoría. Si esta ruta de acceso no es válida, no se crea la auditoría.

No se admite el objetivo FILEPATH para Azure SQL Managed Instance. En su lugar, deberá usar PATH.

TAMAÑO MÁXIMO = max_size

Especifica el tamaño máximo que puede alcanzar el archivo de auditoría. El valor de max_size debe ser un entero seguido de MB, GB, TB o UNLIMITED. El tamaño mínimo que se puede especificar para max_size es 2 MB y el máximo, 2.147.483.647 TB. Cuando se especifica UNLIMITED, el archivo crece hasta que el disco está lleno. (0 también indica UNLIMITED). Si se especifica un valor inferior a 2 MB, se produce el error MSG_MAXSIZE_TOO_SMALL. El valor predeterminado es UNLIMITED.

No se admite el objetivo MAXSIZE para Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { entero | ILIMITADO }

Especifica el número máximo de archivos que se deben conservar en el sistema de archivos además del archivo actual. El valor MAX_ROLLOVER_FILES debe ser un entero o UNLIMITED. El valor predeterminado es UNLIMITED. Este parámetro se evalúa siempre que se reinicia la auditoría (lo que puede suceder cuando se reinicia la instancia de Motor de base de datos o cuando se desactiva la auditoría y, a continuación, se activa de nuevo) o cuando se necesita un nuevo archivo porque se ha alcanzado el MAXSIZE. Cuando se evalúa MAX_ROLLOVER_FILES, si el número de archivos supera la configuración de MAX_ROLLOVER_FILES, se elimina el archivo más antiguo. Como resultado, cuando la configuración de MAX_ROLLOVER_FILES es 0, se crea un archivo cada vez que se evalúa la configuración de MAX_ROLLOVER_FILES. Se elimina solo un archivo automáticamente cuando se evalúa la configuración de MAX_ROLLOVER_FILES, de modo que cuando se disminuye el valor de MAX_ROLLOVER_FILES, el número de archivos no se reduce a menos que se eliminen manualmente los archivos antiguos. El número máximo de archivos que puede especificar es 2.147.483.647.

MAX_ROLLOVER_FILES no es compatible con Azure SQL Managed Instance.

MAX_FILES = entero

Especifica el número máximo de archivos de auditoría que pueden crearse. La auditoría no pasa al primer archivo cuando se alcanza el límite. Cuando se alcanza el MAX_FILES límite, se produce un error en cualquier acción que haga que se generen más eventos de auditoría.

RESERVE_DISK_SPACE = { EN | APAGADO }

Esta opción preasigna el archivo en el disco al valor de MAXSIZE. Solo se aplica si MAXSIZE no es igual a UNLIMITED. El valor predeterminado es OFF.

No se admite el objetivo RESERVE_DISK_SPACE para Azure SQL Managed Instance.

QUEUE_DELAY = entero

Determina el tiempo, en milisegundos, que puede transcurrir antes de exigir que se procesen las acciones de auditoría. El valor 0 indica la entrega sincrónica. El valor mínimo que puede establecerse para la cola es 1000 (1 segundo), que es el valor predeterminado. El máximo es 2147483647 (2.147.483,647 segundos, o 24 días, 20 horas, 31 minutos y 23,647 segundos). Al especificar un número no válido, se produce el error MSG_INVALID_QUEUE_DELAY.

ON_FAILURE = { CONTINUAR | APAGADO | FAIL_OPERATION }

Indica si la escritura de la instancia en el objetivo debe suspender, continuar o detener SQL Server si el objetivo no puede escribir en el registro de auditoría. El valor predeterminado es CONTINUE.

CONTINUE

SQL Server Las operaciones de continúan. Los registros de auditoría no se conservan. La auditoría continúa intentando el registro de eventos y se reanuda si se resuelve la condición de error. La selección de la opción Continuar puede permitir que una actividad no se audite, con lo que se infringirían las directivas de seguridad. Utilice esta opción cuando la operación de continuación del Motor de base de datos sea más importante que el mantenimiento de una auditoría completa.

SHUTDOWN

Obliga a la instancia de SQL Server a apagarse si SQL Server no puede escribir datos en el destino de auditoría por algún motivo. El inicio de sesión que ejecuta la instrucción CREATE SERVER AUDIT debe tener el permiso SHUTDOWN en SQL Server. El comportamiento de apagado persiste aun cuando el permiso SHUTDOWN se revoque más adelante del inicio de sesión que ejecuta la instrucción. Si el usuario no tiene este permiso, se produce un error en la instrucción y no se crea la auditoría. Utilice la opción si un error de auditoría puede poner en peligro la seguridad o la integridad del sistema. Para obtener más información, vea SHUTDOWN.

FAIL_OPERATION

Las acciones de base de datos producen un error si generan eventos auditados. Las acciones que no provocan eventos auditados pueden continuar, pero no se pueden producir eventos auditados. La auditoría continúa intentando el registro de eventos y se reanuda si se resuelve la condición de error. Utilice esta opción si el mantenimiento de una auditoría completa es más importante que el acceso total al Motor de base de datos.

AUDIT_GUID = identificador único

Para admitir escenarios como la creación de reflejo de la base de datos o las bases de datos que participan en un grupo de disponibilidad AlwaysOn, una auditoría necesita un GUID específico que coincida con el GUID que se encuentra en la base de datos reflejada. No se puede modificar el GUID después de crear la auditoría.

OPERATOR_AUDIT

Solo se aplica a: Instancia administrada de Azure SQL.

Indica si la auditoría capturará las operaciones de los ingenieros de soporte técnico de Microsoft cuando necesiten acceder al servidor durante una solicitud de soporte técnico.

RETENTION_DAYS = entero

Se aplica a: Azure SQL Managed Instance y Azure SQL Database solo.

Indica el número de días para almacenar el archivo de registro de auditoría.

predicate_expression

Especifica la expresión de predicado usada para determinar si debe procesarse o no un evento. Las expresiones de predicado están limitadas a una longitud de 3000 caracteres, que limita los argumentos de cadena.

event_field_name

Nombre del campo de evento que identifica el origen del predicado. Los campos de auditoría se describen en sys.fn_get_audit_file. Puede filtrar todos los campos excepto file_name, audit_file_offsety event_time.

Aunque los action_id campos y class_type son de tipo varchar en sys.fn_get_audit_file, solo puede usarlos con números cuando son un origen de predicado para el filtrado. Para obtener la lista de valores que se van a usar con class_type, ejecute la consulta siguiente:

SELECT spt.[name], spt.[number]
FROM [master].[dbo].[spt_values] spt
WHERE spt.[type] = N'EOD'
ORDER BY spt.[name];

número

Cualquier tipo numérico, incluido decimal. Las limitaciones son la falta de memoria física disponible o un número demasiado grande para ser representado como un entero de 64 bits.

'string'

Una cadena ANSI o Unicode según lo requerido por la comparación de predicado. Las funciones de comparación de predicados no realizan ninguna conversión implícita de tipo de cadena. Si se pasa el tipo incorrecto se producirá un error.

Remarks

Se crea una auditoría de servidor en un estado deshabilitado.

La instrucción CREATE SERVER AUDIT forma parte de una transacción. Si revierte la transacción, la instrucción también se revierte.

Permissions

Para crear, modificar o quitar una auditoría de servidor, las entidades de seguridad necesitan el ALTER ANY SERVER AUDITCONTROL SERVER permiso o .

Al guardar la información de auditoría en un archivo, restrinja el acceso a la ubicación del archivo para ayudar a evitar alteraciones.

Examples

A. Crear una auditoría de servidor con un archivo como objetivo

En el ejemplo siguiente se crea una auditoría de servidor denominada HIPAA_Audit con un archivo binario como destino y sin opciones.

CREATE SERVER AUDIT HIPAA_Audit
TO FILE (FILEPATH = '\\SQLPROD_1\Audit\');

B. Crear una auditoría de servidor con el registro de la aplicación Windows como objetivo y con opciones

En el ejemplo siguiente se crea una auditoría de servidor denominada HIPAA_Audit con el conjunto de destino para el registro de aplicaciones de Windows. La cola se escribe cada segundo y apaga el motor de SQL Server si se produce un error.

CREATE SERVER AUDIT HIPAA_Audit
TO APPLICATION_LOG
WITH (
    QUEUE_DELAY = 1000,
    ON_FAILURE = SHUTDOWN
);

C. Crear un servidor de auditoría que contiene una cláusula WHERE

En el ejemplo siguiente se crean una base de datos, un esquema y dos tablas para el ejemplo. La tabla denominada DataSchema.SensitiveData contiene datos confidenciales y el acceso a la tabla debe registrarse en la auditoría.

La tabla denominada DataSchema.GeneralData no contiene datos confidenciales. La especificación de auditoría de base de datos audita el acceso a todos los objetos del esquema DataSchema.

La auditoría del servidor se crea con una WHERE cláusula que limita la auditoría de servidor solo a la SensitiveData tabla. La auditoría de servidor da por hecho que existe una carpeta de auditoría en C:\SQLAudit.

CREATE DATABASE TestDB;
GO

USE TestDB;
GO

CREATE SCHEMA DataSchema;
GO

CREATE TABLE DataSchema.GeneralData
(
    ID INT PRIMARY KEY,
    DataField VARCHAR (50) NOT NULL
);
GO

CREATE TABLE DataSchema.SensitiveData
(
    ID INT PRIMARY KEY,
    DataField VARCHAR (50) NOT NULL
);
GO

Cree la auditoría del servidor en la master base de datos:

USE master;
GO

CREATE SERVER AUDIT AuditDataAccess TO FILE (FILEPATH = 'C:\SQLAudit\')
    WHERE object_name = 'SensitiveData';
GO

ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO

Cree la especificación de auditoría de base de datos en la TestDB base de datos:

USE TestDB;
GO

CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
    FOR SERVER AUDIT [AuditDataAccess]
    ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
    WITH(STATE = ON);
GO

Desencadene el evento de auditoría seleccionando entre tablas:

SELECT ID,
       DataField
FROM DataSchema.GeneralData;

SELECT ID,
       DataField
FROM DataSchema.SensitiveData;
GO

Compruebe la auditoría del contenido filtrado:

SELECT *
FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit', DEFAULT, DEFAULT);
GO

Transact-SQL referencia