La conexión SQLExPress falla en IIS 7 con error de instancia de usuario - "No se pudo generar una instancia de usuario

StackOverflow https://stackoverflow.com/questions/7366295

Pregunta

Principalmente buscando responder a mi pregunta #1 a continuación, pero se agradecería más conocimiento.

Traté de usar estos recursos durante mi investigación, pero no tuve éxito:

http://social.msdn.microsoft.com/forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b (Para este error: No se pudo generar una instancia de usuario de SQL Server debido a la falla en la recuperación de la ruta de datos de aplicaciones locales del usuario. Asegúrese de que el usuario tenga un perfil de usuario local en la computadora. La conexión será cerrada.)

http://social.msdn.microsoft.com/forums/en-us/sqlexpress/thread/6dfdcc22-7a81-4e8f-a947-c1ce6982d4b3/ (Para este error: Cree permiso de base de datos denegado en Database Master. ¿Un intento de adjuntar una base de datos con nombre automático para el archivo? ha fallado. No se puede abrir una base de datos con el mismo nombre, o no se puede abrir el archivo especificado, o se encuentra en UNC Share.)

Preguntas

1.) ¿Por qué ocurre este error al ejecutar los controles RAD Telerik para el proyecto ASP.NET Ajax "Live Demos" con IIS 7 (la ejecución de Telerik Live Demos funciona bien usando el servidor de desarrollo ASP.NET con esta cadena de conexión)

No se pudo generar una instancia de usuario de SQL Server debido a la falla en la recuperación de la ruta de datos de aplicaciones locales del usuario. Asegúrese de que el usuario tenga un perfil de usuario local en la computadora. La conexión será cerrada.

2.) ¿Cómo es la creación de instancias expresas de SQL Server diferentes en IIS 7, desde ASP.NET Development Server & SSMSE

3.) Hay ciertos atributos de una cadena de conexión SQL que no se permiten cuando se ejecuta un sitio web en diferentes contextos (según el #2).

Ambiente:

No estoy ejecutando la aplicación web "Demos en vivo" .NET 3.5 ASP.NET a través del servidor de desarrollo ASP.NET (la función que aparece en su bandeja del sistema y elige un puerto para usted después de hacer clic en Play en Visual Studio). ¡Eso funciona bien! Estoy ejecutando el sitio web en IIS 7. SQL Server Express está utilizando el usuario del servicio de red en Panel de control> Herramientas administrativas> Servicios> SQL Server (SQLExPress).

Uso de esta cadena de conexión proporcionada con el proyecto de demostración de aplicaciones web instalado "Live Demos":

<add name="NorthwindConnectionString"
             connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Northwind.mdf;Integrated Security=True;User Instance=True"
             providerName="System.Data.SqlClient" />

He intentado configurar "Instancia de usuario = falso", pero eso solo arroja otro error:

Cree permiso de base de datos denegado en Database Master. ¿Un intento de adjuntar una base de datos con nombre automático para el archivo? ha fallado. No se puede abrir una base de datos con el mismo nombre, o no se puede abrir el archivo especificado, o se encuentra en UNC Share.

(¿Dónde "?" Es la ruta del archivo *.mdf - C: Users MyDocuments Visual Studio 2008 Projects Telerikdemos Telerik RadControls para ASP.NET AJAX Q2 2011 Live Demos App_Data Northwind.mdff .. La cursiva de desbordamiento de la pila está rota con algunos de esos personajes, así que tuve que eliminar ese camino)

Alguien me respondió en una pregunta anterior para establecer esta "instancia de usuario = falso", pero parece que las instancias de usuario no tienen nada que ver con si usa o no SQL Express. Las instancias de usuario son simplemente una característica de SQL Express que permite que un usuario no privilegiado aloje una instancia de base de datos en su propio contexto de usuario.

Tenga en cuenta que esta base de datos Northwind se almacena en un archivo *.mdf en la carpeta APP_DATA (en el directorio de aplicaciones raíz de "demostraciones en vivo") junto con el *.LDF (archivo de registro). Anteriormente intenté adjuntar los archivos *.mdf como bases de datos reales en la carpeta "Bases de datos" (en el árbol de explorador de objetos SSMSE), pero luego las eliminó.

Carpeta raíz de la aplicación web "Demos" (y las carpetas/archivos anidados) tienen los siguientes usuarios asignados con todos los privilegios:
- IIS Apppool Telerik ("Telerik" es el nombre de mi grupo de aplicaciones en IIS 7 para este sitio)
- iusr
- SERVICIO DE RED

Tomar una nota por mí mismo sobre esta consulta de base de datos maestro SQLExpress:

Seleccione * de SYS.DM_OS_CHILD_INSTANSE

También probé diferentes combinaciones de *.mdf & *.LDF permisos al tiempo que cambió al usuario en el servicio SQL Server (SQLExPress) Windows 7 (panel de control> Herramientas administrativas> Servicios) ... y también reinició el servicio después de realizar esos cambios.

enter image description here

Reproducir:

Descargue los controles Telerik RAD para ASP.NET AJAX. Establezca las permisos que mencioné en la carpeta "Demos en vivo" en archivos de programa Telerik, cambie la versión .NET de la aplicación web a .NET 3.5, cambie su archivo 3.5 web.config con el archivo web.config normal en esa carpeta . Tienes que usar Visual Studio 2010, pero estoy ejecutando esto en Visual Studio 2008 (con un pequeño trabajo gruñido que hice porque nuestra empresa aún no está en VS2010). También cambie los conjuntos BIN35 adecuados en la carpeta de la carpeta "Demos en vivo". Compilar la solución. Crea un sitio web IIS 7. Agregue la autenticación de Windows. La autenticación anónima y de Windows habilitada. Todos los demás están deshabilitados. Establezca el grupo de aplicaciones para usar clásico y 32 bits.

Luego navegando a esta URL y haciendo clic en la imagen de "Primer vistazo".

http: //localhost/combobox/examples/overview/defaultcs.aspx

====================

Se proporcionarán más pruebas si se solicita.

¿Fue útil?

Solución

Está utilizando una cadena de conexión con autenticación de confianza = true. Esto significa que la conexión utiliza el contexto de seguridad del proceso de llamada.

Cuando se ejecuta con el servidor de desarrollo, está ejecutando en el contexto de seguridad del usuario iniciado en el usuario, por lo que todo funciona bien.

Cuando se ejecuta en IIS, se encuentra en el contexto de seguridad del proceso del grupo de aplicaciones, que es el servicio de red, que no tiene un perfil de usuario, por lo tanto, se bloquea.

Puedes arreglarlo por cualquiera de los dos:

  • Cambie la identidad del grupo de aplicaciones a un usuario normal con acceso a la base de datos
  • Use una cadena de conexión con nombre de usuario y contraseña

Otros consejos

IIS no carga el perfil de usuario de Windows, pero ciertas aplicaciones pueden aprovecharlo de todos modos para almacenar datos temporales. SQL Express es un ejemplo de una aplicación que hace esto. Sin embargo, se debe crear un perfil de usuario para almacenar datos temporales en el directorio de perfil o en la colmena del registro. El perfil de usuario para la cuenta de servicio de red fue creado por el sistema y siempre estaba disponible. Sin embargo, con el cambio a identidades únicas del grupo de aplicaciones, el sistema no crea perfil de usuario. Solo los grupos de aplicaciones estándar (DefaultApppool y el clásico .NET Apppool) tienen perfiles de usuario en el disco. No se crea un perfil de usuario si el administrador crea un nuevo grupo de aplicaciones.

Sin embargo, si lo desea, puede configurar los grupos de aplicaciones IIS para cargar el perfil de usuario configurando el atributo LoadUserProfile en "Verdadero".

https://docs.microsoft.com/en-us/iis/manage/configuring-security/applicationpool-identidades

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top