¿Cómo auditar una base de datos SQL Server?
Conoce las diferentes opciones tecnológicas para auditar SQL Server y cómo obtener valor de los datos que recopila.
Introducción
La auditoría de SQL Server es un tema amplio y complejo que implica muchas tecnologías y posibilidades. Intentaremos desmitificar todo lo posible sin excedernos. Esperamos guiarte hacia la solución correcta mientras tomas decisiones tecnológicas informadas.
Captura
La captura es la recopilación de datos en bruto. Toda auditoría comienza con la recopilación de información. Después, hay que procesar los datos, almacenarlos, elaborar informes, etc. Estos aspectos se tratarán más adelante en este artículo, en la sección Obtener valor.
Aunque obtener valor de la información es un reto, conseguir la información para empezar es aún más difícil y tiene implicaciones de gran alcance sobre lo que está disponible para procesar.
Desafíos
¿Por qué es difícil recopilar datos de auditoría? Parece que debería ser fácil.
El problema subyacente es que las bases de datos ejecutan una enorme cantidad de actividad a velocidades increíbles. Cualquier interferencia con esta máquina altamente afinada puede paralizar el rendimiento y ralentizar la base de datos hasta hacerla ir a rastras. Por tanto, el impacto en el rendimiento es el mayor reto en la captura.
Un segundo reto son las cuentas privilegiadas, incluidos los DBA y la cuenta «sa». Normalmente, necesitamos auditar estas cuentas, pero son estas cuentas privilegiadas las que controlan las tecnologías de captura integradas en la base de datos.
Otro reto es el uso habitual de procedimientos en SQL Server. Muchas aplicaciones en SQL Server no ejecutan SQL contra la base de datos, sino que ejecutan procedimientos. Estos procedimientos ejecutan SQL dentro del motor de la base de datos. Esto es importante porque algunas tecnologías de captura sólo pueden ver la actividad fuera de la base de datos, y para ver las SQL, tablas y columnas es necesario capturar dentro de la base de datos.
Discutiremos estas limitaciones a medida que revisemos cada tecnología.

¿Qué datos podrías recopilar?
Hay varios tipos de información que puede recopilar al auditar una base de datos SQL Server.
El requisito más sencillo es capturar los inicios de sesión y los inicios de sesión fallidos. Eso es monitorizar las conexiones a la base de datos (o sesiones) y dónde se originan. La información incluye la hora de inicio de sesión, la hora de cierre de sesión, el nombre de usuario, el programa, la dirección IP, etc.
Otro requisito habitual son los SQL. Los SQL son los comandos ejecutados en las sesiones de inicio de sesión. Se dividen en tres categorías: DDL, DML y Consultas (select). Este desglose es importante porque las consultas son difíciles de capturar y limitan las tecnologías de captura que podemos utilizar. La captura de consultas es fundamental para detectar el robo de datos, la captura de DML sirve para identificar cambios no autorizados y los DDL están relacionados con el control de cambios. Si el robo de datos es un riesgo, hay que capturar las consultas y eso permitiría capturar todo lo demás.
La Captura Selectiva es una solución para reducir el impacto en el rendimiento al no capturar todas las SQL. También simplifica el procesamiento porque hay muchos menos datos con los que tratar. No es ni mucho menos lo ideal, porque se pierde mucha información, pero con algunas tecnologías de auditoría es la única solución. También debes considerar qué harás con los datos capturados, ya que si pretendes descartar la mayor parte y sólo registrar algunas SQL, la captura selectiva podría ser una buena opción.
La captura de valores antes y después no es un requisito común, excepto en algunos sectores (especialmente banca y finanzas), donde es importante para el cumplimiento de la normativa. Antes y después de los valores significa auditar los valores que cambian en la base de datos. Por ejemplo, si alguien actualiza «salario = salario * 2», esta captura registrará todos los salarios originales y los salarios después del cambio. Como se ve en este ejemplo, el SQL puede no contener ninguno de estos valores, por lo que la captura SQL no responde a esta necesidad.
Otra función que no es de auditoría pero que está relacionada con la tecnología de captura es el bloqueo. El bloqueo permite impedir la ejecución de determinadas sentencias SQL. Es una potente medida preventiva que existe en algunas soluciones y está integrada en el motor de captura.
Por último, existe un tipo simplificado de auditoría que utiliza Metadata Snapshots (capturas de metadatos). Por ejemplo, se pueden identificar los cambios entre la lista de usuarios de ayer y la de hoy. Es un tipo de seguimiento del control de cambios y puede implementarse para la configuración, los usuarios, los permisos y los objetos (por ejemplo, tablas, vistas, etc.).
Tecnologías Disponibles
Esta tabla resumen muestra qué tecnología de auditoría es relevante para qué captura de datos. Como puedes ver, casi nada es perfecto. Estas tecnologías también tienen limitaciones y desventajas, así que lee los detalles a continuación.
Inicios de Sesión | SQLs | Antes y Después de Valores | Metadata Snapshot | Bloqueo | |||
DDL | DML | Consultas | |||||
Hágalo usted mismo (DIY) | ✓ | ||||||
C2 Modo de auditoría | ✓ | ✓ | ✓ | ✓ | |||
Auditoría SQL Server | ✓ | ✓ | ✓ | ✓ | |||
Perfilador/Rastreo | ✓ | ✓ | ✓ | ✓ | |||
Eventos Ampliados | ✓ | ✓ | ✓ | ✓ | |||
Triggers | ✓ | ✓ | ✓ | ||||
Registros de logs | ✓ | ||||||
Inspección de paquetes | ✓ | ✓ | ✓ | ✓ | ✓ | ||
Full Capture | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Hágalo usted mismo (DIY)
El «hágalo usted mismo» (DIY) es una solución sencilla que se puede construir internamente sin tecnología especial ni procesamiento complejo. Por ejemplo, puedes tomar una instantánea diaria de los usuarios de la base de datos e identificar los cambios del día anterior. No es muy potente desde el punto de vista de la seguridad, pero puede ayudar a validar el control de cambios. Aparte de sus capacidades limitadas, el principal inconveniente es el tiempo que le llevará a su equipo de DBA implantarlo, mantenerlo y hacerlo funcionar.
Auditoría de SQL Server
Hay varias tecnologías diferentes asociadas con el concepto de Auditoría de SQL Server. Algunas están relacionadas entre sí y otras no. Puede ser confuso, así que las hemos enumerado todas.
SQL Server C2 Audit es un parámetro de configuración en SQL Server (sp_configure ‘c2 audit mode’) que registra automáticamente toda la actividad de la base de datos. Tiene una sobrecarga extremadamente alta y crea archivos masivos. No es una opción realista para auditar SQL Server.
Auditoría SQL Server utiliza Eventos Ampliados. Es una envoltura para la misma cosa con pros y contras similares.
SQL Server Profiler o Trace es una característica anterior de SQL Server que fue reemplazada por Extended Events. SQL Server trace tiene un mayor impacto en el rendimiento y está obsoleto (lo que significa que Microsoft dejará de darle soporte en algún momento). No hay razón para usarla hoy en día.
Extended Events o Eventos Ampliados es una capacidad de captura de SQL Server incorporada. Es la mejor opción de captura sin costes adicionales de licencia. Es adecuada para un proyecto DIY y común en soluciones de bajo coste (ver más adelante). Sin embargo, tiene limitaciones que incluyen:
- No registra la dirección IP del cliente. Si las direcciones IP son un requisito, esta no es la solución.
- Los DBA y las cuentas con privilegios pueden desactivar esta captura, por lo que su eficacia para supervisarlos es limitada.
- La sobrecarga puede ser elevada y depende del perfil de actividad de la base de datos. Incluso utilizando únicamente el búfer en anillo (una captura en memoria de alto rendimiento), en el peor de los casos puede llegar a superar el 1.200%. Aunque una sobrecarga tan elevada es poco probable, una significativa es muy plausible. Sólo en bases de datos de baja actividad el impacto sería insignificante.
- El registro de la actividad puede requerir archivos de gran tamaño. Dependiendo del tipo de almacenamiento, esto puede aumentar aún más el impacto en el rendimiento.
- Considere la posibilidad de realizar una auditoría selectiva. Al auditar sólo determinadas actividades, puede reducir significativamente el tamaño de los archivos. Desde el punto de vista del rendimiento, esto podría reducir la sobrecarga a no más de la mitad, ya que la comprobación de las condiciones de filtrado también tiene un impacto. El inconveniente es que la configuración de los filtros selectivos es tediosa y requiere mucho tiempo.
La conclusión es que los Eventos Ampliados pueden ser una buena solución de captura para bases de datos de baja actividad. Esto es especialmente cierto cuando se utiliza la auditoría selectiva para registrar un puñado de SQLs para cumplir con los requisitos de cumplimiento de menor importancia (ver más adelante).

Triggers
Los Triggers son pequeños fragmentos de código que la base de datos puede ejecutar en respuesta a una actividad.
Hay disparadores de inicio de sesión que pueden dispararse cuando alguien inicia sesión y disparadores DDL que pueden dispararse cuando se ejecuta un DDL. Puede utilizarlos para auditar este tipo de actividad. Estos eventos también son poco frecuentes y es poco probable que causen una sobrecarga de rendimiento significativa. Aunque es posible, este no es un enfoque de auditoría común para sesiones y DDLs.
También hay disparadores DML que se activan cuando los datos cambian en la base de datos. Sin embargo, no pueden ver el SQL y sólo son capaces de registrar los valores antes y después.
El problema de los triggers es que se ejecutan como parte del SQL y, por tanto, aumentan el tiempo que tarda en finalizar. Como los triggers suelen registrar información en otra tabla, suelen tener una sobrecarga elevada. En otras palabras, los triggers DML en tablas altamente transaccionales crearán un impacto significativo en el rendimiento.
Más allá de la sobrecarga, el inconveniente de los triggers es que están controlados por los DBA y otras personas con los permisos adecuados y pueden ser desactivados por cualquiera que desee saltárselos.
También es importante señalar que no existen disparadores o triggers para las consultas. Los desencadenantes son irrelevantes cuando se trata del riesgo de robo de datos.
Registros de Logs
Los registros de logs forman parte del funcionamiento de SQL Server. Contienen todos los cambios en la base de datos y se utilizan para la recuperación de fallos. Al margen de su función principal en la recuperación de fallos, SQL Server puede procesar estos registros para extraer todos los valores anteriores y posteriores. Esto es útil para la seguridad, la replicación y otros fines.
Hay tres mecanismos en SQL Server que procesan los registros de traducción de forma relevante para la seguridad:
- El seguimiento de cambios es el mecanismo antiguo. Utiliza el CDC más reciente.
- La captura de datos de cambios (CDC) almacena información sobre valores anteriores y posteriores. Requiere cierta administración y un mantenimiento regular, y la salida no es trivial de entender. Sin embargo, es probablemente el mejor de los tres.
- Las tablas temporales son un método de seguimiento del contenido de las tablas a lo largo del tiempo. La idea es añadir una dimensión temporal a la tabla para poder realizar consultas referidas al cuándo. Por ejemplo, ¿cuál era el salario de Juan el 17 de enero, o qué aspecto tenía la tabla en un día y hora determinados? El inconveniente es que, dependiendo del tamaño de la tabla y de la frecuencia de los cambios, esto puede requerir mucho espacio y recursos.
Lo bueno de aprovechar los registros de transacciones es que su procesamiento no está «en línea» con la actividad de la base de datos. Aunque el procesamiento consume recursos de la máquina, se produce en paralelo y no ralentiza las transacciones de la base de datos.
Aunque todos estos mecanismos forman parte de SQL Server y no requieren licencias adicionales, están controlados por los administradores de bases de datos (DBA) y es probable que necesite la ayuda de éstos para acceder a ellos. La información de cualquiera de estos mecanismos requiere esfuerzo para consumirla y actualmente no está integrada en su aplicación ni en ninguna otra interfaz de usuario.
Inspección de Paquetes
La tecnología de inspección de paquetes descifra la comunicación que entra y sale de la base de datos para identificar los SQL. Hay dos implementaciones: como sniffer de red fuera de la máquina o con un agente del kernel dentro de ella.
Como sniffer de red, esta tecnología no afecta al rendimiento de la base de datos, pero no puede ver la comunicación local. Eso suele ser inaceptable. El despliegue común utiliza el agente local, y de esta forma se puede ver la comunicación local, pero genera una elevada sobrecarga de red.
Ambos métodos de despliegue tienen retos con el cifrado de red, pero una de las mayores limitaciones es la falta de visibilidad dentro de la base de datos. El uso común de procedimientos almacenados en SQL Server significa que a menudo es imposible conocer el SQL, la tabla o la columna.
La falta de visibilidad interna también es un reto porque SQL Server recibe lotes, no SQLs. Un lote es un bloque TSQL con múltiples SQLs o un pequeño programa. Desglosar los lotes e inferir lo que hacen dentro de la base de datos va de difícil a imposible.
Algunas soluciones basadas en la inspección de paquetes también pueden bloquear la actividad no deseada. Sin embargo, suele haber un problema de sincronización que permite que las peticiones ofensivas pasen.
Full Capture
Core Audit Full Capture es una tecnología de auditoría de nueva generación que se conecta directamente al motor SQL. Se diseñó desde cero para abordar los retos exclusivos de la seguridad y la auditoría de SQL Server. La calidad de la información es similar a la de Extended Events, pero sin la sobrecarga y los DBA no pueden desactivarla.
Full Capture hace exactamente lo que se espera de una tecnología de captura: ver todo sin afectar a la base de datos. Esto le proporciona una visibilidad del 100% con menos del 3% de sobrecarga.
Full Capture también puede proporcionarle valores anteriores y posteriores mediante la integración con disparadores de baja sobrecarga o con la replicación de SQL Server (utilizando registros de transacciones). Así que tiene ambas alternativas con diferentes pros y contras.
Por último, la captura completa tiene capacidades de bloqueo que pueden devolver errores o advertencias a los SQL ofensivos. A diferencia de la inspección de paquetes, en esta medida preventiva no existen lagunas de tiempo ni de otro tipo.

Conclusión sobre la Captura
La parte más difícil de la captura son las consultas, y a menudo es la parte más importante en lo que se refiere al robo de datos. Una vez que se dispone de las consultas, se tiene la mayor parte del resto de la información. Si además necesita los valores antes y después, puede obtenerlos en SQL Server sin interfaz de usuario o como parte de una solución.
Esto significa que tenes cuatro opciones básicas:
- Hágalo usted mismo (DIY) – Utilice Eventos Extendidos para capturar los datos y procesarlos usted mismo (ver más abajo). También puede añadir disparadores o CDC para valores anteriores y posteriores. No hay costes de licencia, pero lleva mucho tiempo construirlo y mantenerlo. No lo recomendamos porque suele ser un proyecto interminable con resultados insatisfactorios.
- Solución de bajo coste – Una solución que utiliza Extended Events o el Profiler. Estas soluciones se encargan del almacenamiento y la generación de informes, pero dependen de la base de datos para realizar la captura. La auditoría DBA es ineficaz debido al método de captura y no pueden escalar para registrar un gran número de SQLs. Esto puede ser aceptable para algunos requisitos de cumplimiento, pero nada más. Si no se supervisan los DBA, la aplicación, el acceso a datos confidenciales, etc., no pueden proporcionar una seguridad de alta calidad.
- Solución de inspección de paquetes – Una solución de auditoría de gama alta que examina los paquetes de la base de datos. Puede manejar mucho más volumen que las soluciones de bajo coste, pero proporciona informes en la misma línea. En cierto modo son peores que las soluciones de bajo coste, ya que éstas también pueden ver el interior del motor de la base de datos, mientras que los inspectores de paquetes no pueden. Estas soluciones son buenas para el cumplimiento, pero ofrecen una seguridad limitada.
- Core Audit – una solución de gama alta que puede capturar cualquier cosa que pueda necesitar y proporcionar potentes informes, alertas y análisis. No hay limitaciones ni agujeros y es la seguridad más completa.
Obteneniendo valor
Captar datos de auditoría es sólo la primera mitad del problema. Una vez que se tienen los datos, hay que convertirlos en información significativa. Un repositorio con miles de millones de SQL es inútil por sí mismo. Esta sección analiza brevemente lo que se puede hacer para obtener valor de todos estos datos.
Informes de cumplimiento. Una expectativa básica de la auditoría de bases de datos es lograr la conformidad. Para ello, se necesitan informes sobre inicios de sesión, inicios de sesión fallidos, actividad privilegiada, acceso a datos confidenciales y mucho más. El reto consiste en decidir qué registrar y cómo crear informes significativos a partir de ello. Los informes eficaces se basan en tres principios básicos:
- El tema del informe debe ser realista en su entorno. Este tipo de informe funciona para subconjuntos de actividad de alto riesgo y bajo volumen. Como DDLs, DBAs ejecutando DMLs, etc.
- Encuentre la forma correcta de informar sobre ello. Muchas veces de forma agregada, como contar el número de inicios de sesión de cada usuario en lugar de enumerarlos.
- Afinar los informes sin perder valor de seguridad. Por ejemplo, excluir la actividad de un script de monitorización, pero asegurarse de que lo que se excluye no puede suponer un riesgo para la seguridad.
La elaboración de informes de cumplimiento no es difícil, sólo requiere un repositorio, un motor de elaboración de informes y un poco de tiempo. En Core Audit dispone de un repositorio altamente escalable, un motor de generación de informes fácil de usar y asistentes con políticas e informes incorporados para empezar.
Análisis de anomalías. La mayor parte de la actividad de las bases de datos no se presta a la elaboración de informes de cumplimiento y requiere algo que pueda escalar a volúmenes masivos. Eso requiere un tipo especial de repositorio y automatización que pueda localizar actividad inusual en él. Esto sólo existe en las soluciones de gama alta.
Core Audit puede alertar cuando nuevos usuarios están activos en la base de datos cuando se conectan desde diferentes aplicaciones o IPs o están activos en momentos inusuales, cuando SQLs inusuales acceden a información sensible, de volúmenes SQL inusuales, de potenciales ataques de inyección SQL, y mucho más. Hay muchas formas de trocear, comparar y contrastar la actividad para encontrar comportamientos anómalos.
Análisis forense reactivo. El análisis forense reactivo consiste en obtener detalles adicionales sobre los eventos de seguridad. Estos eventos pueden ser una línea sospechosa en un informe, una infracción potencial, una indicación de otra fuente, y más. Sea cual sea el suceso, siempre se necesita saber más sobre lo ocurrido.
El reto es disponer de un repositorio con la información. En la mayoría de las soluciones, está limitado a los eventos que decide registrar. En Core Audit, aparte del repositorio de cumplimiento, también tiene el repositorio de seguridad que almacena automáticamente información sobre cada SQL en su base de datos. Aunque el repositorio de seguridad es menos detallado, garantiza que siempre podrá saber lo que ha ocurrido.
Análisis forense proactivo. Este tipo de análisis forense le ofrece visibilidad de toda la actividad de la base de datos. Tiene múltiples objetivos, pero el más importante es desarrollar controles. Sin una comprensión sólida de lo que ocurre en la base de datos, es imposible diseñar informes de cumplimiento, alertas de anomalías o incluso comprender las amenazas a las que se enfrenta.
No se puede proteger lo que no se puede ver, y el análisis forense proactivo es un primer paso muy recomendable para proteger la base de datos de SQL Server. Pero también es importante identificar las malas prácticas de seguridad, los ataques y las infracciones, los cambios en los patrones de comportamiento, las lagunas en los controles desplegados y mucho más.
Core Audit Forense Proactivo incluye herramientas de análisis gráfico para visualizar los perfiles de actividad desde varias dimensiones e incluye pilas basadas en el tiempo, gráficos de árbol, gráficos Sunburst, un Sankey, gráficos de red y mucho más.

Prácticas Recomendadas
A continuación te dejamos algunos pasos básicos de buenas prácticas que te ayudarán a empezar:
- Defina sus objetivos. ¿Quiere cumplir determinadas normativas o proteger su base de datos frente a ciertas amenazas? ¿Por qué está realizando este proyecto y qué pretende conseguir? Es difícil tener éxito sin unos objetivos claros.
- Identifique los recursos disponibles y defina el marco. ¿Hay un plazo de ejecución? ¿Existe un presupuesto? ¿Quién formará parte del proyecto y está familiarizado con SQL Server? Conocer sus recursos le permite definir objetivos realistas.
- ¿Cuáles son sus requisitos de captura? ¿Es el robo de datos un riesgo y necesita capturar consultas? ¿Le preocupan los cambios no autorizados en los datos? ¿Necesita capturar valores anteriores y posteriores? ¿Le preocupa el abuso de privilegios? Esto se deriva de sus riesgos, necesidades de seguridad y requisitos de conformidad.
- ¿Qué valor espera obtener de los datos? ¿Necesita informes de conformidad o alertas de anomalías? ¿Le preocupa la inyección SQL? Todo depende del nivel de seguridad y conformidad que quiera alcanzar.
- Elija un enfoque. Sus recursos y objetivos le orientarán rápidamente entre un producto de bricolaje y bajo coste o una solución de gama alta. Póngase en contacto con algunos proveedores para obtener demostraciones y presupuestos que le permitan cuantificar los costes y calibrar el valor potencial. Póngase en contacto con nosotros y le proporcionaremos más información y asistencia de forma gratuita.
- Si se trata de un proyecto de bricolaje o si va a adquirir una solución de bajo coste, tendrá que experimentar en producción para asegurarse de que el impacto en el rendimiento es aceptable y para definir los filtros que necesita para una huella de almacenamiento razonable.
- Cuando utilice Core Audit, comience con Proactive Forensics para comprender el perfil de actividad de su base de datos y diseñar sus controles.
- Audite el acceso local, los DBA y las cuentas privilegiadas. El acceso local es un vector de ataque popular en el robo de datos y ataques de ransomware. Las cuentas DBA también son un vector de alto riesgo para el robo de credenciales y el abuso de privilegios.
- Con Core Audit, controle la cuenta de aplicación. Las cuentas de aplicación son el objetivo de la inyección SQL y otras vulnerabilidades de las aplicaciones. Auditarlas requiere una captura y un análisis de anomalías de alto nivel.
- Examine otras cuentas que necesite controlar. Tenga en cuenta las cuentas nuevas, no aprobadas e inactivas.
- Mejore la eficacia del control. Realice un análisis de deficiencias para determinar la eficacia de sus controles. Eso incluye estimar los falsos negativos (eventos no detectados) y el potencial de ataques desconocidos (como los de día cero). Existen varios métodos para hacerlo.
Reflexión Final
Existen múltiples tecnologías y soluciones para proteger una base de datos SQL Server. Van desde el bricolaje a los productos de bajo coste, pasando por las soluciones de gama alta. Todo depende de sus necesidades y de los recursos disponibles. Póngase en contacto con nosotros y le ayudaremos a encontrar el enfoque que mejor se adapte a su situación particular.