¡Hola, chicos!
Todo está en paz, ¿verdad?

A través de este artículo abriré una nueva categoría en mi blog llamada “Qué no hacer”, que son algunos artículos sobre malas prácticas de administración de bases de datos que comenzaré a recopilar aquí y así demostrarles todo lo que no se debe hacer.

Para debutar en esta categoría, voy a escribir aquí sobre una mala práctica que veo que mucha gente usa y pregunta en grupos cómo hacerlo, que es habilitar al usuario sa en la instancia de SQL Server.

¿Por qué el usuario SA está deshabilitado de forma predeterminada?

Como lo mencionó en los comentarios de mi amigo. Edvaldo Castro, si instala SQL Server usando el modo de autenticación de Windows, el usuario "sa" está deshabilitado de forma predeterminada. Si selecciona la opción “Modo de autenticación de SQL Server y Windows” (también conocido como Modo mixto) durante la instalación, deberá establecer la contraseña para el usuario sa y esta se activará de forma predeterminada.

Por razones de seguridad, es muy recomendable mantener este usuario deshabilitado, ya que es un usuario con perfil de administrador (pertenece al rol de servidor sysadmin), que tiene permiso para realizar cualquier acción en la instancia, y un usuario estándar, que está creado previamente en todas las instancias de SQL Server. Debido a esto, la mayoría de los ataques realizados a instancias de SQL Server se llevan a cabo mediante intentos de acceder a la instancia utilizando este usuario.

Desafortunadamente, terminamos encontrando varios sistemas y aplicaciones que insisten en conectarse a la base de datos usando el usuario sa (¿¿Para qué?? ¿Por qué??), generando una falla de seguridad importante en la base de datos, haciéndole la vida más fácil a los piratas informáticos que intentan ingresar a su banco y dejando al DBA sin saber qué hacer (especialmente cuando no tiene la opción de bloquear el acceso a este sistema).

Como podemos ver en la imagen superior, SQL Server nos permite habilitar una opción que genera un registro de intentos fallidos de conexión, lo que puede ayudarnos a identificar si nuestra base de datos está sufriendo intentos de invasión por fuerza bruta. Sin embargo, a menos que supervise activamente estos fallos de autenticación (lo cual no es muy común), sólo identificará que esto está sucediendo horas, tal vez días, después de los ataques. Y para entonces quizá ya sea demasiado tarde.

Por este motivo, una buena forma de intentar obstaculizar la posibilidad de una invasión es no permitir que el potencial atacante conozca el nombre de ningún usuario con privilegios en la instancia. Y activar el usuario SA es todo lo contrario.

Quiero correr ese riesgo. ¿Cómo activar el usuario sa?

Bueno, dadas las advertencias anteriores, y si realmente desea correr este riesgo de seguridad, ahora le demostraré cómo activar el usuario SA en su instancia de SQL Server.

Si no ha habilitado el modo de autenticación mixta (modo de autenticación de SQL Server y Windows) y su instancia solo permite inicios de sesión mediante autenticación AD (esta es una buena práctica de seguridad, pero no siempre viable), deberá activar la autenticación de modo mixto.

Para hacer esto, simplemente haga clic derecho en su instancia y seleccione la opción "Propiedades":

Después de eso, active la opción “Modo de autenticación de SQL Server y Windows” en las opciones de seguridad:

Después de confirmar los cambios, su instancia ahora permitirá iniciar sesión utilizando usuarios de AD (Active Directory) y de SQL Server (como sa). Vale la pena recordar que es necesario reiniciar el servicio SQL Server para que se apliquen los cambios.

Si desea aplicar este cambio usando códigos T-SQL, simplemente use este script:

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
GO

Ahora que ha habilitado el inicio de sesión con usuarios de SQL Server, es hora de habilitar el usuario sa. Para hacer esto, expanda las carpetas “Seguridad” e “Inicios de sesión” en la ventana “Explorador de objetos” y haga clic derecho en el usuario “sa”, que tendrá un ícono y una pequeña “x” roja, indicando que este usuario está desactivado:

Luego de hacer clic en el botón “Propiedades”, verás la pantalla con las propiedades del usuario “sa”. En esta pantalla, puede definir una nueva contraseña para el usuario “sa” y también definir políticas de complejidad de contraseña (Aplicar política de contraseña), políticas de caducidad de contraseña (Aplicar caducidad de contraseña) y definir si el usuario debe cambiar la contraseña en el próximo inicio de sesión (El usuario debe cambiar la contraseña en el próximo inicio de sesión).

En la pestaña "Estado", puede activar/desactivar el inicio de sesión del usuario "sa", como se muestra en la siguiente captura de pantalla:

Después de confirmar los cambios haciendo clic en el botón “Aceptar”, el usuario “sa” estará activo y ahora podrá usarse normalmente para invadir acceder a su instancia.

Si desea habilitar al usuario SA usando un script T-SQL, simplemente use el siguiente script:

USE [master]
GO
ALTER LOGIN [sa] WITH PASSWORD=N'@DirceuResende123#'
GO
ALTER LOGIN [sa] ENABLE
GO

Buenos chicos,
Espero que no hayas activado el usuario “sa” en tu entorno y que hayas disfrutado de este artículo.

Un abrazo y ¡hasta la próxima!