Seguridad integrada con SQL Server en un sitio web ASP.NET

miércoles, 20 de junio de 2007

Una consulta muy frecuente que recibimos es “como configurar un sitio web para acceder a SQL Server mediante seguridad integrada”, bajo la situación más habitual (y recomendada) que es aquella en la cual los usuarios que acceden al sitio no utilizan seguridad integrada de Windows o, aún en caso de hacerlo, no tienen asignados permisos individuales de acceso a la base de datos de la aplicación.

La implementación de este escenario, en la plataforma actual de servidores Web de Windows (Windows Server 2003), consta de los siguientes pasos:

1. Definir un usuario del dominio para ejecutar la aplicación web y acceder al SQL Server

Crear una cuenta de usuario en Active Directory, designada para ejecutar las aplicaciones web y acceder al SQL Server. Es recomendable que esta cuenta no sea administrador del dominio, ni del equipo en que ejecuta el website o el SQL Server.

2. Asignar permisos a ese usuario en Microsoft SQL Server

Mediante el SQL Server Management Studio (SQL Server 2005) o el SQL Server Enterprise Manager (SQL Server 2000) definir, dentro de la seccion Security, una cuenta (login) de seguridad integrada correspondiente a la cuenta designada del dominio; asignarle permisos sobre las bases que corresponda, solamente con los privilegios que requiera para ejeutarse.

3. Preparar la cuenta para ejecutar aplicaciones ASP.NET

Este es un paso comunmente omitido, que resulta en la imposibildad de ejecutar correctamente el sitio.
En el equipo en que se ejecuta el sitio Web (Internet Information Server) configurar lo siguiente:

  1. Asignar a la cuenta designada permisos de control total sobre la carpeta temporaria de Windows (habitualmente C:\Windows\Temp).
  2. Desde la línea de comandos posicionarse en la carpeta correspondiente al framework .NET en uso (por ejemplo C:\Windows\Microsoft.NET\Framework\ v2.0.50727) y allí ejecutar el siguiente comando:
    aspnet_regiis –ga {dominio\cuenta}
    reemplazando {dominio\cuenta} por la cuenta designada en el paso 1

4. Asignar la cuenta designada como identidad del proceso ASP.NET

En Windows Server 2003, eso se realiza en la consola de Administración de Servicios Internet (IIS) asignando la identidad del Application Pool que se utiliza para ejecutar la aplicación Web.
IMPORTANTE: si la aplicación está configurada para ejecutar en el “Default App Pool”, u otro compartido con múltiples aplicaciones, puede ser conveniente definir un application pool separado para los sitios que deban ejecutarse bajo esta cuenta de usuario, y asignar los sitios al App Pool creado.

5. En la aplicación ASP.NET, asegurarse que no esté activa la “impersonación”

Si se utiliza Authentication mode=”Windows”, asegurarse que en el archivo Web.config no exista un elemento <identity> o, si existe, asegurarse de que tenga asignado el atributo impersonate=”false”.
De ese modo, el proceso se ejecutará con la cuenta designada.
NOTA: sin necesidad de impersonar, desde el código de la aplicación Web puede conocerse el nombre de la cuenta autenticada mediante la propiedad User.Identity



Con estos pasos, se lograrán los objetivos buscados:

  • Evitar incluir nombres de usuario y password en la configuración de la aplicación (o en cualquier otro componente de la misma)
  • Ejecutar el sitio web con una cuenta que no tenga más privilegios de los requeridos
  • Evitar otorgar permisos sobre la base de datos a los usuarios del sitio.