jueves, 6 de noviembre de 2014

Habilitar site ASP.NET IIS para conectar a SQLExpress

En el artículo de hoy veremos cómo solucionar un problema muy tonto pero que puede hacerte perder algo de tiempo. Si trabajas con el entorno por defecto que plantea Visual Studio 2013 para un site ASP.NET durante la fase de desarrollo no tendrías problema (por defecto localDB e IIS Express). El problema lo tendrás si necesitas por algún motivo ‘deployar’ el site en el IIS local por ejemplo y que acceda a un SQLExpress.

Escenario

Site alojado en IIS Local (no IIS Express) que necesitamos que acceda a una base de datos SQLExpresss también en la misma máquina configurado con seguridad windows. Cuando el site intenta conectar al SQL recibimos una excepción de este tipo. (podría variar dependiendo de la operación que intentes realizar contra la base de datos).
No se puede quitar el base de datos 'x' porque no existe o el usuario no tiene permiso.
o
Se ha denegado el permiso CREATE DATABASE en la base de datos 'master'.

Causa

El problema ya lo dice el mensaje es que no tenemos privilegios para acceder a la base de datos, matizando, mi usuario windows sí que accede… es el usuario asociado al proceso de IIS el que no tiene acceso a SQLExpress. Como sabemos con canalización integrada en versiones superiores a la 7 de IIS el usuario por defecto asociado al proceso de IIS de cada site es el Pool de aplicaciones que es un usuario virtual (built-in).

Solución

En caso que tengamos seguridad Windows en SQL deberíamos dar acceso al usuario asociado al pool de aplicaciones (presupongo que usas SQL Management Studio)...

En SQL cuando gestionas la seguridad Windows puedes seleccionar usuarios de la máquina o dominio como harías en una carpeta del pc. Lo curioso es que en la típica pantalla de Windows para gestionar la seguridad ntfs de un recurso no encontrarás estos usuarios virtuales asociados al pool del site, por mucho que selecciones Entidades de seguridad Integrada (built-in).

Habilitar site ASP.NET IIS para conectar a SQLExpress, figura 1

Este tipo de usuario has de forzarlo (sin realizar búsqueda) de este modo “IIS APPPOOL\NombrePool”. Si el nombre es correcto lo creará al pulsar aceptar, luego ya has de darle los privilegios necesarios a nivel de servidor y en la base de datos que necesite acceder.

Habilitar site ASP.NET IIS para conectar a SQLExpress, figura 2

Más información relacionada en el siguiente enlace:
http://www.iis.net/learn/manage/configuring-security/application-pool-identities

Espero sea útil la información, recuerda visitar areaTIC tal vez encuentres algún artículo que pueda interesarte.