¿Se pueden deshabilitar los inicios de sesión de autenticación de Windows en SQL Server 2008 (o R2)?

8

Entonces, podemos iniciar sesión en Windows o modo mixto, pero ¿podemos configurar SQL Server para que solo use inicios de sesión internos y bloquee todos los inicios de sesión de Windows?

¿Es la única solución para agregar todos los inicios de sesión potenciales de Windows y establecerlos en privilegios restringidos como un procedimiento preventivo (o reactivo)?

jcolebrand
fuente

Respuestas:

5

No se puede deshabilitar por completo, por dos razones:

  • En la instalación, los inicios de sesión se aprovisionan para NT AUTHORITY\SYSTEM, NT SERVICE\SQLSERVERAGENT(o un grupo que contiene la cuenta de servicio del Agente SQL), y NT SERVICE\MSSQLSERVER(o un grupo que contiene la cuenta de servicio del motor de base de datos SQL). Estos son sysadmininicios de sesión de nivel que deben estar disponibles para que SQL Server funcione correctamente.

    Si bien una prueba rápida reveló que la eliminación de los tres inicios de sesión solo impidió que el Agente SQL se reiniciara (el motor de la base de datos funcionó bien), estoy seguro de que hay otras funciones que dependen de los otros dos inicios de sesión ... fueron creados por defecto por una razón, para no perder el tiempo con ellos. (Para su información, si prueba esto usted mismo: la opción de secuencia de comandos Drop & Create para iniciar sesión en SSMS no es miembro de la función del servidor de secuencia de comandos).

  • En el modo de usuario único, a los administradores locales se les otorgan automáticamente sysadminprivilegios de nivel independientemente de si se creó o no un inicio de sesión que "contenga" a esos usuarios. Esta es una percha para cuando has cerrado las llaves en el auto.

Como se menciona en la otra respuesta, solo los inicios de sesión de Windows creados explícitamente tendrán acceso para conectarse (mi comentario original era incorrecto): eliminar todos los inicios de sesión de Windows creados por el usuario es suficiente para evitar el acceso.

Si necesita ir un paso más allá y evitar que se creen inicios de sesión de Windows , aquí hay un punto de partida (la gestión basada en políticas, al menos en 2008, no admite evitar esto mientras sucede):

CREATE TRIGGER trg_PreventWindowsLogins
    ON ALL SERVER
    AFTER CREATE_LOGIN
AS
BEGIN

    SET NOCOUNT ON;

    IF (EVENTDATA().exist('/EVENT_INSTANCE[1]/LoginType[1]/text()[1] eq "Windows (NT) Login"') = 1)
    BEGIN
        RAISERROR(N'Not allowed to create Windows logins!', 16, 1);
        ROLLBACK;
    END

END

Por supuesto, cualquier persona con suficientes permisos podría vencer esto, pero ese es un problema separado ...

Jon Seigel
fuente