SQL Server Audit (motor de base de datos)

Se aplica a: SQL Server Azure SQL Managed Instance

La auditoría de una instancia de Motor de base de datos de SQL Server o de una base de datos individual implica el seguimiento y registro de los eventos que se producen en Motor de base de datos. La auditoría deSQL Server permite crear auditorías de servidor, que pueden contener especificaciones de auditoría de servidor para los eventos de servidor, y especificaciones de auditoría de base de datos para los eventos de base de datos. Los eventos auditados se pueden escribir en los registros de eventos o en los archivos de auditoría.

Importante

En Azure SQL Managed Instance, esta característica de T-SQL tiene ciertos cambios de comportamiento. Vea Diferencias de T-SQL en Azure SQL Managed Instance para obtener más información sobre los cambios de comportamiento de T-SQL.

Hay varios niveles de auditoría de SQL Server, según los requisitos legales o de estándares para la instalación. SQL Server Audit proporciona las herramientas y los procesos que debe tener para habilitar, almacenar y ver auditorías en varios objetos de servidor y base de datos.

Puede registrar grupos de acciones de auditoría en el servidor por instancia, así como grupos de acciones o acciones de auditoría en la base de datos por base de datos. El evento de auditoría se producirá cada vez que se encuentre la acción auditable.

Todas las ediciones de SQL Server admiten auditorías en el nivel de servidor. Todas las ediciones admiten auditorías de nivel de base de datos a partir de SQL Server 2016 (13.x) SP1. Antes de eso, las auditorías de nivel de base de datos se limitaban a las ediciones Enterprise, Developer y Evaluation. Para obtener más información, vea Características compatibles con las ediciones de SQL Server 2016.

Nota:

Este tema se aplica a SQL Server. Para SQL Database, consulte Introducción a la auditoría de base de datos SQL.

Componentes de SQL Server Audit

Una auditoría es la combinación de varios elementos en un único paquete para un grupo específico de acciones de servidor o de base de datos. Los componentes de SQL Server Audit se combinan para producir una salida denominada auditoría, de la misma manera que una definición de informe combinada con gráficos y elementos de datos da como resultado un informe.

SQL Server Audit usa eventos extendidos para facilitar la creación de auditorías. Para obtener más información acerca de los eventos extendidos, vea eventos extendidos.

SQL Server Audit

El objeto SQL Server Audit recopila una única instancia de acciones y grupos de acciones de nivel de servidor o de base de datos para su supervisión. La auditoría se realiza en el nivel de instancia de SQL Server. Es posible tener varias auditorías por cada instancia de SQL Server.

Cuando se define una auditoría, se especifica la ubicación para los resultados generados. Éste es el destino de la auditoría. La auditoría se crea en un estado deshabilitado y no audita automáticamente ninguna acción. Una vez habilitada la auditoría, el destino de la auditoría recibe los datos de la misma.

Especificación de auditoría de servidor

El objeto Especificación de auditoría de servidor pertenece a una auditoría. Puede crear una especificación de auditoría de servidor por cada auditoría, ya que ambos se crean en el ámbito de la instancia de SQL Server.

La especificación de auditoría de servidor recopila muchos grupos de acciones de nivel de servidor generados por la característica Extended Events. Puede incluir grupos de acciones de auditoría en una especificación de auditoría de servidor. Los grupos de acciones de auditoría son grupos predefinidos de acciones, que constituyen eventos atómicos que tienen lugar en el motor de base de datos. Estas acciones se envían a la auditoría, que las registra en el destino.

Los grupos de acciones de auditoría de nivel de servidor se describen en el artículo Grupos de acciones y acciones de SQL Server Audit.

Especificación de auditoría de base de datos

El objeto Especificación de auditoría de base de datos también pertenece a una auditoría de SQL Server. Puede crear una única especificación de auditoría de base de datos para cada base de datos de SQL Server y cada auditoría.

La especificación de auditoría de base de datos recopila acciones de auditoría de nivel de base de datos generadas por la característica Extended Events. Puede agregar grupos de acciones de auditoría o eventos de auditoría a una especificación de auditoría de base de datos. Los eventos de auditoría son las acciones atómicas que puede auditar el motor de SQL Server. Losgrupos de acciones de auditoría son grupos predefinidos de acciones. Ambos están en el ámbito de la base de datos de SQL Server. Estas acciones se envían a la auditoría, que las registra en el destino. No incluyas objetos con ámbito en el servidor, como las vistas del sistema, en una especificación de auditoría de base de datos de usuario.

Los grupos de acciones de auditoría de base de datos y las acciones de auditoría se describen en el artículo Grupos de acciones y acciones de SQL Server Audit.

Destino

Los resultados de una auditoría se envían a un destino, que puede ser un archivo, el registro de eventos de seguridad de Windows o el registro de eventos de aplicación Windows. Los registros se deben revisar y archivar periódicamente para garantizar que el destino tiene espacio suficiente para escribir más registros.

Importante

Cualquier usuario autenticado puede leer y escribir en el registro de eventos de aplicación Windows. El registro de eventos de aplicación requiere permisos más bajos que el registro de eventos de seguridad de Windows, por lo que es menos seguro que éste.

La escritura en el registro de seguridad de Windows requiere que se agregue la cuenta del servicio SQL Server a la directiva Generar auditorías de seguridad. De forma predeterminada, el sistema local, el servicio local y el servicio de red forman parte de esta directiva. Este valor se puede configurar utilizando el complemento de directiva de seguridad (secpol.msc). Además, la directiva de seguridad Auditar el acceso a objetos debe estar habilitada tanto para Correcto como para Error. Este valor se puede configurar utilizando el complemento de directiva de seguridad (secpol.msc). En Windows Vista o Windows Server 2008 (y versiones posteriores), puede establecer la directiva Aplicación generada más específica desde la línea de comandos usando el programa de directiva de auditoría (AuditPol.exe). Para obtener más información sobre los pasos necesarios para habilitar la escritura en el registro de seguridad de Windows, vea Escribir eventos de auditoría de SQL Server en el registro de seguridad. Para obtener más información sobre el programa Auditpol.exe, vea el artículo 921469 de Knowledge Base que describe cómo usar la directiva de grupo para configurar las opciones detalladas de auditoría de seguridad. Los registros de eventos de Windows son globales para el sistema operativo Windows. Para obtener más información sobre los registros de eventos de Windows, vea Información general sobre el Visor de eventos. Si necesita permisos más concretos en la auditoría, utilice el destino de archivo binario.

Al guardar información de auditoría en un archivo, para tratar de impedir su alteración, puedes restringir el acceso a la ubicación del archivo de las maneras siguientes:

  • La cuenta de servicio de SQL Server debe tener los permisos de lectura y escritura.

  • Normalmente, los administradores de auditoría requieren los permisos de lectura y escritura. Entonces, se supone que los administradores de auditoría son cuentas de Windows para la administración de archivos de auditoría, por ejemplo para la copia en diversos recursos compartidos, la copia de seguridad, etc.

  • Los lectores de auditoría autorizados para leer archivos de auditoría deben tener permiso de lectura.

Incluso cuando el motor de base de datos está escribiendo en un archivo, otros usuarios de Windows pueden leer el archivo de auditoría si tienen permiso. El motor de base de datos no crea ningún bloqueo exclusivo que evite las operaciones de lectura.

Dado que el motor de base de datos puede tener acceso al archivo, los inicios de sesión de SQL Server que tengan el permiso CONTROL SERVER pueden usar el motor de base de datos para tener acceso a los archivos de auditoría. Para registrar a todos los usuarios que estén leyendo el archivo de auditoría, defina una auditoría en master.sys.fn_get_audit_file. De esta forma se registran los inicios de sesión con permiso CONTROL SERVER que hayan tenido acceso al archivo de auditoría a través de SQL Server.

Si un administrador de auditoría copia el archivo en otra ubicación (para archivarlo, etc.), los permisos de las listas de control de acceso (ACL) de la nueva ubicación se deben reducir solo a los siguientes:

  • Administrador de auditoría: lectura/escritura

  • Lector de auditoría: lectura

Es recomendable generar los informes de la auditoría desde otra instancia de SQL Server, por ejemplo una instancia de SQL Server Express a la que solo tengan acceso administradores de auditoría o lectores de auditoría. El uso de otra instancia del motor de base de datos para la creación de informes puede contribuir a evitar que usuarios no autorizados obtengan acceso al registro de la auditoría.

Puedes proporcionar más protección contra el acceso no autorizado mediante el cifrado de la carpeta en que el archivo de la auditoría está almacenado. Para ello, puedes utilizar el Cifrado de unidad Bitlocker de Windows o el Sistema de cifrado de archivos de Windows.

Para obtener más información sobre los registros de auditoría que se escriben en el destino, vea SQL Server Audit Records.

Información general sobre el uso de SQL Server Audit

Puede usar SQL Server Management Studio o Transact-SQL para definir una auditoría. Una vez creada y habilitada la auditoría, el destino comenzará a recibir entradas.

Puede leer los registros de eventos de Windows mediante la utilidad Visor de eventos en Windows. Para los destinos de archivo, puede usar tanto el Visor del archivo de registros en SQL Server Management Studio como la función fn_get_audit_file para leer el archivo de destino.

El proceso general de creación y uso de una auditoría es el siguiente:

  1. Cree una auditoría y defina el destino.

  2. Cree una especificación de auditoría de servidor o una especificación de auditoría de base de datos que se asigne a la auditoría. Habilite la especificación de auditoría.

  3. Habilite la auditoría.

  4. Lea los eventos de auditoría mediante el Visor de eventosde Windows, el Visor del archivo de registroso la función fn_get_audit_file.

Para obtener más información, consulte Crear una auditoría de servidor y una especificación de auditoría de servidor y Crear una especificación de auditoría de servidor y de auditoría de base de datos.

Consideraciones

Si se produce un error al comenzar la auditoría, el servidor no se iniciará. En este caso, se puede iniciar el servidor con la opción -f en la línea de comandos.

Si un error de auditoría hace que el servidor se cierre o no se inicie porque se ha especificado ON_FAILURE=SHUTDOWN para la auditoría, se escribe en el registro el evento MSG_AUDIT_FORCED_SHUTDOWN. Dado que el apagado se producr en la primera aparición de este valor, el evento se escribe una vez. Este evento se escribirá después de la aparición del mensaje del error para la auditoría que ha provocado el cierre. El administrador puede omitir los cierres provocados por auditorías si inicia en modo de usuario único mediante la marca -m. De esta forma, indicarás al sistema que cualquier auditoría en la que se haya especificado ON_FAILURE=SHUTDOWN debe ejecutarse en esa sesión como ON_FAILURE=CONTINUE. Cuando se inicia SQL Server con la marca -m, se escribe el mensaje MSG_AUDIT_SHUTDOWN_BYPASSED en el registro de errores.

Para obtener más información sobre las opciones de inicio del servicio, vea Opciones de inicio del servicio de motor de base de datos.

Adjuntar una base de datos con una auditoría definida

Si se adjunta una base de datos que tiene una especificación de auditoría y que especifica un GUID que no existe en el servidor, se producirá una especificación de auditoría huérfana. Dado que en la instancia del servidor no existe ninguna auditoría con ese GUID, no se graba ningún evento de auditoría. Para corregir esta situación, utilice el comando ALTER DATABASE AUDIT SPECIFICATION para conectar la especificación de auditoría huérfana a una auditoría de servidor existente. O bien use el comando CREATE SERVER AUDIT para crear una nueva auditoría de servidor con el GUID especificado.

Si lo deseas, puedes adjuntar una base de datos en la que se haya definido una especificación de auditoría a otra edición de SQL Server que no admita SQL Server Audit, como SQL Server Express, pero no se registrará ningún evento de auditoría.

Creación de reflejo de la base de datos y SQL Server Audit

Una base de datos en la que se haya definido una especificación de auditoría de base de datos y que use la creación de reflejo de la base de datos incluirá la especificación de auditoría de base de datos. Para poder trabajar correctamente en la instancia de SQL reflejada, se deben configurar los elementos siguientes:

  • El servidor reflejado debe tener una auditoría con el mismo GUID para permitir que la especificación de auditoría de base de datos escriba registros de auditoría. Esto se puede configurar mediante el comando CREATE AUDIT WITH GUID =<GUID desde la auditoría del servidor de origen>.

  • En el caso de los destinos de archivo binario, la cuenta de servicio del servidor reflejado debe tener los permisos adecuados para la ubicación en la que se escribe la pista de auditoría.

  • Si el destino es el registro de eventos de Windows, la directiva de seguridad del equipo en el que está ubicado el servidor reflejado debe permitir el acceso de la cuenta de servicio al registro de eventos de seguridad o de la aplicación.

Auditar a los administradores

Los miembros del rol fijo de servidor sysadmin se identifican como el usuario dbo en cada base de datos. Para auditar las acciones de los administradores, se auditan las acciones del usuario dbo .

Crear y administrar auditorías con Transact-SQL

Puede usar instrucciones DDL, vistas y funciones de administración dinámica y vistas de catálogo para implementar todos los aspectos de SQL Server Audit.

Instrucciones de lenguaje de definición de datos (DDL)

Puede usar las siguientes instrucciones DDL para crear, modificar y quitar especificaciones de auditoría:

Instrucciones DDL Descripción
ALTER AUTHORIZATION Cambia la propiedad de un elemento protegible.
ALTER DATABASE AUDIT SPECIFICATION Modifica un objeto de especificación de auditoría de base de datos mediante la característica SQL Server Audit.
ALTER SERVER AUDIT Modifica un objeto de auditoría de servidor mediante la característica SQL Server Audit.
ALTER SERVER AUDIT SPECIFICATION Modifica un objeto de especificación de auditoría de servidor mediante la característica SQL Server Audit.
CREATE DATABASE AUDIT SPECIFICATION Crea un objeto de especificación de auditoría de base de datos mediante la característica SQL Server Audit.
CREATE SERVER AUDIT Crea un objeto de auditoría de servidor mediante SQL Server Audit.
CREATE SERVER AUDIT SPECIFICATION Crea un objeto de especificación de auditoría de servidor mediante la característica SQL Server Audit.
DROP DATABASE AUDIT SPECIFICATION Elimina un objeto de especificación de auditoría de base de datos mediante la característica SQL Server Audit.
DROP SERVER AUDIT Quita un objeto de auditoría de servidor usando la característica SQL Server Audit.
DROP SERVER AUDIT SPECIFICATION Elimina un objeto de especificación de auditoría de servidor mediante la característica SQL Server Audit.

Funciones y vistas dinámicas

En la tabla siguiente se enumeran las funciones y vistas dinámicas que puede usar con las auditorías de SQL Server.

Funciones y vistas dinámicas Descripción
sys.dm_audit_actions Devuelve una fila por cada acción de auditoría sobre la que se puede guardar información en el registro de auditoría y por cada grupo de acciones de auditoría que se puede configurar como parte de SQL Server Audit.
sys.dm_server_audit_status Proporciona información sobre el estado actual de la auditoría.
sys.dm_audit_class_type_map Devuelve una tabla que asigna el campo class_type del registro de auditoría al campo class_desc en sys.dm_audit_actions.
fn_get_audit_file Devuelve información de un archivo de auditoría creado por una auditoría de servidor.

Vistas de catálogo

En la tabla siguiente se enumeran las vistas de catálogo que puede usar con las auditorías de SQL Server.

Vistas de catálogo Descripción
sys.database_audit_specifications Contiene información sobre las especificaciones de auditoría de base de datos en una auditoría de SQL Server de una instancia del servidor.
sys.database_audit_specification_details Contiene información sobre las especificaciones de auditoría de base de datos en una auditoría de SQL Server de una instancia de servidor para todas las bases de datos.
sys.server_audits Contiene una fila para cada auditoría de SQL Server de una instancia de servidor.
sys.server_audit_specifications Contiene información sobre las especificaciones de auditoría de servidor de una auditoría de SQL Server en una instancia del servidor.
sys.server_audit_specifications_details Contiene información sobre los detalles de especificación de auditoría del servidor (acciones) en una auditoría de SQL Server de una instancia de servidor.
sys.server_file_audits Contiene información adicional sobre el tipo de auditoría de archivos en una auditoría de SQL Server de una instancia de servidor.

Permisos

Cada una de las características y los comandos para SQL Server Audit tiene sus propios requisitos de permisos.

Para crear, modificar o quitar una auditoría de servidor o una especificación de auditoría de servidor, las entidades de seguridad de servidor requieren el permiso ALTER ANY SERVER AUDIT o CONTROL SERVER. Para crear, modificar o quitar una especificación de auditoría de base de datos, las entidades de seguridad de base de datos requieren el permiso ALTER ANY DATABASE AUDIT, o el permiso ALTER o CONTROL en la base de datos. Además, las entidades de seguridad deben tener el permiso para conectarse a la base de datos o los permisos ALTER ANY SERVER AUDIT o CONTROL SERVER.

El permiso VIEW ANY DEFINITION proporciona acceso las vistas de auditoría de nivel de servidor y VIEW DEFINITION proporciona acceso a las vistas de auditoría de nivel de base de datos. La denegación de estos permisos invalida la posibilidad de ver las vistas de catálogo, incluso si la entidad de seguridad tiene los permisos ALTER ANY SERVER AUDIT o ALTER ANY DATABASE AUDIT.

Para obtener más información sobre cómo conceder derechos y permisos, consulte GRANT (Transact-SQL).

Precaución

De la misma forma que las entidades de seguridad del rol sysadmin pueden manipular cualquier componente de auditoría, las del rol db_owner pueden manipular las especificaciones de auditoría en una base de datos. SQL Server Audit comprobará si un inicio de sesión que crea o modifica una especificación de auditoría tiene al menos el permiso ALTER ANY DATABASE AUDIT. Sin embargo, no realiza ninguna validación al adjuntar una base de datos. Como norma, debería otorgar la misma confianza a las especificaciones de auditoría de base de datos que a las entidades de seguridad que tienen el rol sysadmin o db_owner.

Crear una auditoría de servidor y una especificación de auditoría de servidor

Crear una especificación de auditoría de servidor y de auditoría de base de datos

Ver un registro de SQL Server Audit

Escribir eventos de SQL Server Audit en el registro de seguridad

Propiedades del servidor (página Seguridad)
Explica cómo activar la auditoría de inicio de sesión para SQL Server. Los registros de auditoría se almacenan en el registro de aplicación de Windows.

c2 audit mode (opción de configuración del servidor)
Explica la compatibilidad de seguridad del modo auditoría C2 en SQL Server.

Auditoría de seguridad (categoría de eventos, SQL Server Profiler)
Explica los eventos de auditoría que puede utilizar en SQL Server Profiler. Para más información, consulte SQL Server Profiler.

Seguimiento de SQL
Explica cómo puede usar el Seguimiento de SQL desde sus propias aplicaciones para crear seguimientos manualmente, en lugar de usar SQL Server Profiler.

Desencadenadores DDL
Explica cómo puede usar los desencadenadores del Lenguaje de definición de datos (DDL) para realizar el seguimiento de los cambios en sus bases de datos.

Microsoft TechNet: SQL Server TechCenter: Seguridad y protección de SQL Server 2005
Proporciona información actualizada sobre la seguridad de SQL Server.