SQL Server, Internet Information Server y el motor ASP.NET proporcionan modelos de seguridad sólidos que funcionan bien juntos. Para mantener seguros los datos y las aplicaciones del usuario, Microsoft también establece la configuración predeterminada para cada servicio en valores bastante bajos.
El desafío al que se enfrentan la mayoría de los desarrolladores es cómo utilizar SQL Server, IIS y ASP.NET para establecer el nivel adecuado de confianza entre las aplicaciones y los datos sin dejar agujeros de seguridad que otros puedan comprometer fácilmente. Debido a que hay tres tipos de servicios involucrados (SQL Server, IIS y ASP.NET), se deben seguir tres pasos clave para garantizar la seguridad de la solución. Esta sección analiza uno de los métodos más comunes (y confiables) para configurar permisos y niveles de confianza adecuados para aplicaciones web.
Definir la cuenta de usuario IIS personalizada de DotNetKB
La forma más segura de proteger su aplicación web es definir un usuario personalizado con permisos limitados y luego configurar IIS para que se ejecute como el usuario personalizado al ejecutar su aplicación web. Esto es bastante fácil de implementar y garantiza que cada visitante de su aplicación web sólo tenga los permisos que usted desea que tenga.
El primer paso es generar un nuevo usuario de Windows (llamado DotNetKB en este ejemplo), establecerle una contraseña segura y luego agregarlo al grupo de invitados de Windows (Grupo de invitados de Windows). Además, asegúrese de que las casillas de verificación Contraseña nunca caduquen y El usuario no puede cambiar la contraseña estén seleccionadas. Esto generará un usuario con privilegios limitados que puede utilizar como identidad al ejecutar su aplicación web en IIS (consulte la Figura 1).
Luego, llame al Administrador de Internet Information Server y seleccione la aplicación web que aloja estas páginas. En este ejemplo, puede seleccionar la aplicación web (DotNetKB_WebSite) que aloja la página de prueba generada anteriormente. Haga clic derecho en la aplicación web en la vista de árbol y seleccione Propiedades... en el menú contextual. Luego seleccione Seguridad del directorio y haga clic en el botón Editar en la sección Control de autenticación y acceso anónimo del cuadro de diálogo. Finalmente, ingrese un nombre de usuario personalizado (DotNetKB), desmarque la casilla Permitir que IIS controle la contraseña e ingrese una contraseña para la cuenta de usuario personalizada. Después de completar todo este trabajo, haga clic en el botón Aceptar para guardar estos cambios en la base de datos de configuración de IIS (consulte la Figura 2).
[Cortar-Página]
En este punto, IIS se ejecutará con una cuenta personalizada con permisos limitados. Cualquier visitante que visite las páginas web de su aplicación se ejecutará como este usuario personalizado y solo tendrá permisos de autenticación para ese usuario personalizado.
Autorizar la cuenta de usuario DotNetKB para acceder a SQL Server
Luego deberá otorgar al usuario personalizado los permisos adecuados para acceder a la base de datos (DotNetKB). Para hacer esto, puede usar Microsoft SQL Server Enterprise Manager o escribir un script personalizado para crear dicho usuario y otorgarle acceso a objetos específicos. Este artículo describe cómo hacer esto usando el Administrador corporativo de SQL Server.
Nota: Aunque Visual Studio .NET 2003 tiene muchas funciones integradas potentes que son compatibles con SQL Server, no permite una fácil administración de usuarios y permisos de usuario desde Visual Studio .NET 2003. En organizaciones y equipos grandes, estas tareas avanzadas suelen ser realizadas por administradores de bases de datos. Por lo tanto, después de iniciar SQL Server Enterprise Manager, puede seguir los pasos a continuación para agregar un usuario personalizado (DotNetKB) a la base de datos.
·En la vista de árbol de la izquierda, expanda el nodo para mostrar la base de datos DotNetKB. En mi computadora, la vista de árbol está estructurada de la siguiente manera: Consola Raíz Grupo de servidores SQL (LOCAL) (Windows NT) Bases de datos DotNetKB.
·Luego, haga clic derecho en el nodo Usuarios debajo de la base de datos y seleccione Nuevo usuario de base de datos... (Nuevo usuario de base de datos...). Cuando aparezca el cuadro de diálogo Propiedades del usuario de la base de datos - Nuevo usuario, seleccione (<Nuevo>) en el cuadro desplegable Nombre de inicio de sesión.
·Cuando aparezca el cuadro de diálogo Propiedades de inicio de sesión de SQL Server - Nuevo inicio de sesión, seleccione la pestaña General e ingrese DotNetKB en el cuadro de entrada Nombre. Asegúrese de que el botón de opción Autenticación de Windows esté seleccionado y seleccione el nombre de la computadora donde se encuentra la cuenta de usuario personalizada en el cuadro desplegable Dominio. Luego seleccione DotNetKB en el cuadro desplegable Base de datos.
·Ahora, seleccione la pestaña Bases de datos, busque la base de datos DotNetKB en la lista en la parte superior del cuadro de diálogo y selecciónela. Luego, asegúrese de que la función pública esté seleccionada en la lista en la parte inferior del cuadro de diálogo. Finalmente, haga clic en el botón Aceptar en la parte inferior del cuadro de diálogo para guardar los cambios.
Luego, debe agregar permisos de ejecución a todos los procedimientos almacenados y funciones personalizadas en la base de datos DotNetKB. Para hacer esto, solo necesitas otorgar permisos al rol público. Puede otorgar permisos a los usuarios de DotNetKB, lo que facilitará que los inicios de sesión futuros (cuando estos usuarios obtengan acceso a DotNetKB) ejecuten procedimientos almacenados sin la necesidad de agregar nuevos permisos para cada usuario.
Los siguientes son los pasos para otorgar permisos de ejecución a procedimientos y funciones almacenados en la base de datos DotNetKB:
·Resalte el nodo Usuarios debajo de la base de datos DotNetKB en la vista de árbol para mostrar una lista de usuarios para esta base de datos. Localice el usuario DotNetKB y haga doble clic en él para abrir el cuadro de diálogo Propiedades de usuarios de la base de datos.
· Con la función pública resaltada (seleccionada), haga clic en el botón Propiedades... para abrir el cuadro de diálogo Propiedades de la función de la base de datos. Luego haga clic en el botón Permisos... para mostrar una lista de objetos de base de datos y configuraciones de permisos.
Con la función pública seleccionada en la lista desplegable Función de base de datos en la parte superior del cuadro de diálogo, busque todos los procedimientos almacenados y funciones personalizadas definidas para esta base de datos (es posible que necesite expandir el cuadro de diálogo para ver los nombres completos) y asegúrese Seleccione la casilla de verificación EJECUTAR al lado de cada elemento. Es posible que algunos objetos del sistema tengan otras casillas marcadas; no cambie estas opciones.
·Finalmente, después de configurar todos los permisos de EJECUCIÓN, haga clic en el botón Aceptar para guardar los cambios y cerrar el cuadro de diálogo. Haga clic en el botón Aceptar uno tras otro hasta que se cierren todos los cuadros de diálogo.
En este punto, ha creado un usuario personalizado para IIS y ha configurado los permisos correspondientes del usuario en SQL Server. Ahora, debe realizar un cambio de configuración en el proyecto web ASP.NET para asegurarse de que ASP.NET utilice la misma cuenta de usuario para todas las llamadas a SQL Server.
Configure su aplicación ASP.NET para hacerse pasar por usuarios de DotNetKB
El último paso para generar una configuración sólida y confiable para una aplicación web ASP.NET que se ejecuta en IIS es configurar la aplicación web ASP.NET para que pueda aceptar una ID de usuario de Windows de IIS y pueda usarse para acceder a otros recursos del sistema operativo. . Para hacer esto, solo necesita ingresar una línea de código en el archivo raíz web.config.
El archivo web.config modificado tiene este aspecto:
<configuración>
<sistema.web>
...otros elementos...
<identity impersonate="true"/> <!-- Suponiendo ID de usuario de IIS-->
...otros elementos...
</sistema.web>
</configuración>
Tenga en cuenta que simplemente agrega el elemento y establece el atributo simulado en verdadero. No es necesario que introduzca una cuenta de usuario ni una contraseña, ya que IIS proporcionará esta información. Es decir, incluso si otros pueden leer su archivo de configuración, no pueden determinar qué credenciales de identidad se utilizan para ejecutar su aplicación web.
En este punto, ha generado un usuario personalizado y ha establecido los permisos adecuados para que acceda a SQL Server e IIS.
En este punto, IIS se ejecutará con una cuenta personalizada con permisos limitados. Cualquier visitante que visite las páginas web de su aplicación se ejecutará como este usuario personalizado y solo tendrá permisos de autenticación para ese usuario personalizado.
Autorizar la cuenta de usuario DotNetKB para acceder a SQL Server
Luego deberá otorgar al usuario personalizado los permisos adecuados para acceder a la base de datos (DotNetKB). Para hacer esto, puede usar Microsoft SQL Server Enterprise Manager o escribir un script personalizado para crear dicho usuario y otorgarle acceso a objetos específicos. Este artículo describe cómo hacer esto usando el Administrador corporativo de SQL Server.
Nota: Aunque Visual Studio .NET 2003 tiene muchas funciones integradas potentes que son compatibles con SQL Server, no permite una fácil administración de usuarios y permisos de usuario desde Visual Studio .NET 2003. En organizaciones y equipos grandes, estas tareas avanzadas suelen ser realizadas por administradores de bases de datos. Por lo tanto, después de iniciar SQL Server Enterprise Manager, puede seguir los pasos a continuación para agregar un usuario personalizado (DotNetKB) a la base de datos.
·En la vista de árbol de la izquierda, expanda el nodo para mostrar la base de datos DotNetKB. En mi computadora, la vista de árbol está estructurada de la siguiente manera: Consola Raíz Grupo de servidores SQL (LOCAL) (Windows NT) Bases de datos DotNetKB.
·Luego, haga clic derecho en el nodo Usuarios debajo de la base de datos y seleccione Nuevo usuario de base de datos... (Nuevo usuario de base de datos...). Cuando aparezca el cuadro de diálogo Propiedades del usuario de la base de datos - Nuevo usuario, seleccione (<Nuevo>) en el cuadro desplegable Nombre de inicio de sesión.
·Cuando aparezca el cuadro de diálogo Propiedades de inicio de sesión de SQL Server - Nuevo inicio de sesión, seleccione la pestaña General e ingrese DotNetKB en el cuadro de entrada Nombre. Asegúrese de que el botón de opción Autenticación de Windows esté seleccionado y seleccione el nombre de la computadora donde se encuentra la cuenta de usuario personalizada en el cuadro desplegable Dominio. Luego seleccione DotNetKB en el cuadro desplegable Base de datos.
·Ahora, seleccione la pestaña Bases de datos, busque la base de datos DotNetKB en la lista en la parte superior del cuadro de diálogo y selecciónela. Luego, asegúrese de que la función pública esté seleccionada en la lista en la parte inferior del cuadro de diálogo. Finalmente, haga clic en el botón Aceptar en la parte inferior del cuadro de diálogo para guardar los cambios.
Luego, debe agregar permisos de ejecución a todos los procedimientos almacenados y funciones personalizadas en la base de datos DotNetKB. Para hacer esto, solo necesitas otorgar permisos al rol público. Puede otorgar permisos a los usuarios de DotNetKB, lo que facilitará que los inicios de sesión futuros (cuando estos usuarios obtengan acceso a DotNetKB) ejecuten procedimientos almacenados sin la necesidad de agregar nuevos permisos para cada usuario.
Los siguientes son los pasos para otorgar permisos de ejecución a procedimientos y funciones almacenados en la base de datos DotNetKB:
·Resalte el nodo Usuarios debajo de la base de datos DotNetKB en la vista de árbol para mostrar una lista de usuarios para esta base de datos. Localice el usuario DotNetKB y haga doble clic en él para abrir el cuadro de diálogo Propiedades de usuarios de la base de datos.
· Con la función pública resaltada (seleccionada), haga clic en el botón Propiedades... para abrir el cuadro de diálogo Propiedades de la función de la base de datos. Luego haga clic en el botón Permisos... para mostrar una lista de objetos de base de datos y configuraciones de permisos.
Con la función pública seleccionada en la lista desplegable Función de base de datos en la parte superior del cuadro de diálogo, busque todos los procedimientos almacenados y funciones personalizadas definidas para esta base de datos (es posible que necesite expandir el cuadro de diálogo para ver los nombres completos) y asegúrese Seleccione la casilla de verificación EJECUTAR al lado de cada elemento. Es posible que algunos objetos del sistema tengan otras casillas marcadas; no cambie estas opciones.
·Finalmente, después de configurar todos los permisos de EJECUCIÓN, haga clic en el botón Aceptar para guardar los cambios y cerrar el cuadro de diálogo. Haga clic en el botón Aceptar uno tras otro hasta que se cierren todos los cuadros de diálogo.
En este punto, ha creado un usuario personalizado para IIS y ha configurado los permisos correspondientes del usuario en SQL Server. Ahora, debe realizar un cambio de configuración en el proyecto web ASP.NET para asegurarse de que ASP.NET utilice la misma cuenta de usuario para todas las llamadas a SQL Server.
Configure su aplicación ASP.NET para hacerse pasar por usuarios de DotNetKB
El último paso para generar una configuración sólida y confiable para una aplicación web ASP.NET que se ejecuta en IIS es configurar la aplicación web ASP.NET para que pueda aceptar una ID de usuario de Windows de IIS y pueda usarse para acceder a otros recursos del sistema operativo. . Para hacer esto, solo necesita ingresar una línea de código en el archivo raíz web.config.
El archivo web.config modificado tiene este aspecto:
<configuración>
<sistema.web>
...otros elementos...
<identity impersonate="true"/> <!-- Suponiendo ID de usuario de IIS-->
...otros elementos...
</sistema.web>
</configuración>
Tenga en cuenta que simplemente agrega el elemento y establece el atributo simulado en verdadero. No es necesario que introduzca una cuenta de usuario ni una contraseña, ya que IIS proporcionará esta información. Es decir, incluso si otros pueden leer su archivo de configuración, no pueden determinar qué credenciales de identidad se utilizan para ejecutar su aplicación web.
En este punto, ha generado un usuario personalizado y ha establecido los permisos adecuados para que acceda a SQL Server e IIS.