Endurecimiento de la seguridad de SQL Server (Linux y Windows: evaluación, red, TLS, autenticación, permisos, auditoría, TDE)
SQL ServerNivel: IntermedioDuración: 5 min (evaluación) – 3 horas (endurecimiento completo)No es una guía de instalación: localiza y cierra las brechas de una instancia de SQL Server 2019 / 2022 / 2025 en ejecución (Linux o Windows). Primero una Evaluación de seguridad de solo lectura lista las brechas por gravedad e indica a qué tarjeta lleva cada hallazgo; después se cierran las áreas una a una o todas en orden: dirección de escucha y firewall, Force Encryption + certificado y validación en el cliente, deshabilitar sa y directiva de contraseñas (CHECK_POLICY), roles y un usuario de aplicación sin DDL, superficie de ataque (xp_cmdshell, TRUSTWORTHY, guest), Server Audit, TDE (copia del certificado obligatoria), copias de seguridad cifradas, cuenta de servicio y permisos de archivos, seguimiento de las CU. TDE y el cifrado de copias de seguridad están disponibles en Standard y Enterprise (no en Express). Al final la evaluación se vuelve a ejecutar.
Topología: Una instancia de SQL Server (Linux o Windows) + servidor de aplicaciones; Always On AG en las notas
Escenarios
- Evaluación de seguridad: ¿qué brechas tengo? (solo lectura) — El análisis que se ejecuta primero: sa, directiva de contraseñas, contraseñas vacías, miembros de sysadmin, permisos de public/guest, xp_cmdshell, conexiones sin cifrar, auditoría, TDE y copias de certificados, puertos y firewall; no cambia nada.
- Endurecimiento completo (todo en orden) — Instancia recién instalada o nunca endurecida: se aplican todas las áreas en un orden seguro; SQL Server se reinicia una o dos veces (hace falta una ventana de mantenimiento).
- Red y conectividad: ¿quién puede conectarse y desde dónde? (escucha, firewall, Browser) — SQL Server escucha en todas las interfaces, el 1433 está abierto a todo el mundo y SQL Browser se ejecuta sin necesidad. Cambiar la dirección de escucha requiere un reinicio.
- Cifrar las conexiones (Force Encryption, certificado, validación en el cliente) — Las conexiones van sin cifrar o con un certificado temporal autofirmado; los clientes usan TrustServerCertificate=true. Cambiar el certificado requiere un reinicio.
- Autenticación y contraseñas (sa, CHECK_POLICY, autenticación de Windows) — sa habilitado, sin directiva de contraseñas en los inicios de sesión SQL, contraseñas vacías/débiles; una cuenta personal de DBA y deshabilitar sa. Sin tiempo de inactividad (solo el paso a la autenticación de Windows requiere reinicio).
- Privilegios mínimos y superficie de ataque (roles, public, guest, xp_cmdshell) — El usuario de aplicación es db_owner o sysadmin, permisos adicionales en public/guest, xp_cmdshell/TRUSTWORTHY habilitados; diseño de roles e informe de permisos. Sin tiempo de inactividad.
- Auditoría: ¿quién hizo qué? (Server Audit, Database Audit Specification) — El auditor pide un registro de inicios de sesión y de cambios de permisos y de esquema; Server Audit a archivo (o al registro de eventos de Windows), envío a un sistema central y retención. Sin tiempo de inactividad. Sin licencia adicional en todas las ediciones (2016 SP1+).
- Cifrar los datos en disco (TDE) — TDE contra la apertura de un disco, un archivo de datos o una copia de seguridad en otro servidor: DMK, certificado, DEK. Se aplica en línea; la copia del certificado es OBLIGATORIA (si se pierde, la base de datos y sus copias no se pueden abrir). Licencia: disponible en SQL Server 2019+ Standard y Enterprise, no en Express.
- Seguridad de las copias de seguridad (copias cifradas, certificado, permisos) — Las copias de seguridad no están cifradas, el directorio de copias está abierto a todos y las contraseñas están en texto plano en los scripts; BACKUP … WITH ENCRYPTION, copia del certificado y permisos del directorio. Sin tiempo de inactividad. El cifrado de copias de seguridad está disponible en Standard y Enterprise, no en Express.
- Lado del sistema operativo (cuenta de servicio, permisos de archivos, SELinux) — El servicio se ejecuta con LocalSystem o con una cuenta de administrador, los directorios de datos/copias están abiertos a todos y SELinux está desactivado; cambiar la cuenta de servicio requiere un reinicio.
- Parches y versión: ¿estoy en una versión soportada y en la última CU? — Versión, nivel de CU y fin del soporte (el de 2016 terminó en julio de 2026); enlaza con la guía de parches CU para aplicarlas. Solo lectura.
Antes de empezar
- SQL Server está en ejecución; mssql-tools18 está instalado y … es sysadmin. sqlcmd está en /opt/mssql-tools18/bin/ (no en el PATH; la guía usa la ruta completa). Antes de ejecutar el script, lea la contraseña en una variable sin mostrarla: read -rsp 'Contraseña: ' SQLCMDPASSWORD; export SQLCMDPASSWORD y sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh. Instalación: Instalación de SQL Server en Linux.
- Una sesión de PowerShell como administrador; la cuenta de Windows con la que se inició sesión es sysadmin en SQL Server (sqlcmd -E). Instalación: Instalación de SQL Server en Windows.
- Hay dos sesiones abiertas: en una se aplican los pasos y en la otra se mantiene abierta una conexión sysadmin (sqlcmd). Después de deshabilitar sa y de los cambios de firewall, Force Encryption y servicio, pruebe una conexión nueva en una sesión aparte; no cierre la sesión antigua. Último recurso: una conexión DAC local (sqlcmd -A) siempre funciona desde el propio servidor; si queda bloqueado por completo, en modo de usuario único (…systemctl stop mssql-server; sudo -u mssql /opt/mssql/bin/sqlservr -m…net start … /m…) un administrador local entra como sysadmin.
- Ventana de mantenimiento: SQL Server se reiniciará en las áreas que elija (dirección de escucha, certificado/Force Encryption, cuenta de servicio, modo de autenticación).… En un AG, aplíquelo primero en las réplicas secundarias, después cambie el primario con un failover y aplíquelo en el antiguo primario.…
- Lista de las aplicaciones que se conectan (servidor, inicio de sesión, controlador). El paso de evaluación muestra las que están conectadas en este momento.
- Existe una copia completa reciente y copias de master/msdb (guía de copias de seguridad). Con TDE y cifrado de copias, sin la copia del certificado los datos no se pueden recuperar.
Fases de la guía
- Evaluación de seguridad (solo lectura) — Listar los hallazgos dentro de la instancia · Comprobar el lado del sistema operativo · Comprobar el lado del sistema operativo
- Antes de empezar: punto de retorno — Hacer una copia de los inicios de sesión, los ajustes y la configuración · Hacer una copia de los inicios de sesión, los ajustes y el registro
- Autenticación — 1. Diagnóstico — Mostrar los inicios de sesión, la directiva y el modo de autenticación
- Autenticación — 3. Aplicación — Crear los inicios de sesión de aplicación e informes con directiva · Crear los inicios de sesión de aplicación e informes con directiva · Cambiar las contraseñas vacías o iguales al nombre de usuario · Cambiar las contraseñas vacías o iguales al nombre de usuario · Preparar el acceso personal de DBA · Verificar que el grupo de AD de los DBA es sysadmin …
- Autenticación — 4. Verificación — Verificar el estado de la autenticación · Probar el inicio de sesión como sa desde el servidor de aplicaciones · Probar el inicio de sesión como sa desde el servidor de aplicaciones
- Permisos — 1. Diagnóstico — Mostrar los permisos de servidor y de base de datos
- Permisos — 3. Aplicación — Reducir la superficie de ataque (sp_configure) · Desactivar TRUSTWORTHY y el acceso de guest · Configurar roles, esquema y usuarios · Quitar el usuario de aplicación de db_owner · Informe de permisos
- Permisos — 4. Verificación — Verificar que el usuario de aplicación no puede ejecutar DDL
- TLS — 1. Diagnóstico — Mostrar el estado de cifrado de las conexiones
- TLS — 3. Aplicación — Crear una CA de prueba y un certificado de servidor · Crear la clave y la solicitud de firma (CSR) · Verificar el certificado y la clave · Configurar el certificado y Force Encryption (mssql-conf) · Reiniciar SQL Server · Crear o importar el certificado …
- TLS — 4. Verificación — Verificar que todas las conexiones TCP están cifradas
- TLS — 5. Después: renovación del certificado — Procedimiento de renovación del certificado
- Red — 1. Diagnóstico: ¿quién se conecta y desde dónde? — Mostrar las direcciones de escucha y el origen de los clientes
- Red — 3. Aplicación — Restringir la dirección de escucha (mssql-conf) · Restringir la dirección de escucha (TCP/IP IPn) · Abrir el puerto en el firewall solo a las redes permitidas · Abrir el puerto en el firewall solo a las redes permitidas · Desactivar SQL Browser (instancia predeterminada) · Reiniciar SQL Server para la dirección de escucha …
- Red — 4. Verificación — Probar la conexión desde el servidor de aplicaciones (sesión nueva) · Probar la conexión desde el servidor de aplicaciones (sesión nueva)
- Auditoría — 1. Diagnóstico — Mostrar las auditorías existentes y la auditoría de inicios de sesión
- Auditoría — 2. Red de seguridad — Preparar el directorio de auditoría · Preparar el directorio de auditoría
- Auditoría — 3. Aplicación — Definir el Server Audit y los eventos de nivel de servidor · Registrar el acceso a datos en el esquema de la aplicación · Script que exporta los registros de auditoría · Archivo de contraseña, cron y rsyslog para la exportación
- Auditoría — 4. Verificación — Hacer un cambio y verlo en el registro de auditoría
- Copias de seguridad — 1. Diagnóstico — Mostrar el estado de cifrado de las copias de seguridad y los certificados · Permisos del directorio de copias de seguridad · Permisos del directorio de copias de seguridad
- Copias de seguridad — 3. Aplicación — Crear el certificado de copias de seguridad y respaldarlo de inmediato · Crear el certificado de copias de seguridad y respaldarlo de inmediato · Hacer una copia de seguridad cifrada y verificarla · Corregir los permisos del directorio de copias de seguridad · Corregir los permisos del directorio de copias de seguridad
- Sistema operativo — 1. Diagnóstico — Cuenta de servicio, permisos y SELinux · Cuentas de servicio y permisos de directorios
- Sistema operativo — 3. Aplicación — Bloquear la cuenta mssql y corregir los permisos de directorios · Mantener SELinux en Enforcing y confinar SQL Server · Pasar la cuenta de servicio a una cuenta virtual o una gMSA · Corregir los permisos del directorio de datos
- TDE — 1. Diagnóstico — Mostrar el estado de cifrado y los certificados
- TDE — 2. Red de seguridad — Copia completa antes de TDE
- TDE — 3. Aplicación — Crear la DMK y el certificado de TDE y respaldarlos de inmediato · Crear la DMK y el certificado de TDE y respaldarlos de inmediato · AG: cargar el certificado de TDE en las demás réplicas · Crear la clave de cifrado de la base de datos y activar TDE · Supervisar hasta que termine el cifrado
- TDE — 4. Verificación — Verificar la base de datos cifrada y la copia del certificado
- Parches y versión — 1. Diagnóstico — Mostrar la versión y el nivel de CU · Actualizaciones pendientes en el lado del sistema operativo
- Parches y versión — 5. Después — Registrar el calendario de parches
- Evaluación final: ¿se han cerrado las brechas? — Volver a ejecutar la evaluación de seguridad · Volver a comprobar el lado del sistema operativo · Volver a comprobar el lado del sistema operativo