Tengo un proyecto web (C # Asp.Net, EF 4, MS SQL 2008 e IIS 7) y necesito migrarlo a IIS 7 localmente (en este momento funciona bien con CASSINI).
Localmente en IIS tengo mi Default Web Site
con mi implementación. Tanto mi despliegue como Default Web Site
en el grupo ASP.NET v4.0 (buscar imagen para la configuración), el grupo objetivo Framework 4 como mi proyecto web.
Al visitar el sitio, el navegador no muestra la página y permite que el navegador descargue la página.
Tengo otros proyectos ejecutándose en IIS localmente y funcionan sin problemas (pero no usan Entity Framework).
Usando el registrador de eventos veo los errores a continuación:
Exception information:
Exception type: EntityException
Exception message: The underlying provider failed on Open.
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
ACTUALIZACIÓN: Puede leer en los recursos sobre esta pregunta que los permisos deben otorgarse manualmente en MS SQL 2008 como se explica en su respuesta. Con IIS 7.5 y MS SQL 2008 R2, no debería ser necesario configurar manualmente el permiso.
fuente
Respuestas:
Parece que está fallando al intentar abrir una conexión a SQL Server.
Debe agregar un inicio de sesión a SQL Server para
IIS APPPOOL\ASP.NET v4.0
y otorgar permisos a la base de datos.En SSMS, debajo del servidor, expanda Seguridad, luego haga clic con el botón derecho en Inicios de sesión y seleccione "Nuevo inicio de sesión ...".
En el cuadro de diálogo Nuevo inicio de sesión, ingrese el grupo de aplicaciones como nombre de inicio de sesión y haga clic en "Aceptar".
A continuación, puede hacer clic con el botón derecho en el inicio de sesión para el grupo de aplicaciones, seleccionar Propiedades y seleccionar "Asignación de usuarios". Verifique la base de datos apropiada y los roles apropiados. Creo que podría seleccionar
db_datareader
ydb_datawriter
, pero creo que aún necesitaría otorgar permisos para ejecutar procedimientos almacenados si lo hace a través de EF. Puede consultar los detalles de los roles aquí .fuente
Puede cambiar ApplicationPoolIdentity de IIS7 -> Grupos de aplicaciones -> Configuración avanzada.
En ApplicationPoolIdentity encontrará el sistema local. Esto hará que su aplicación se ejecute
NT AUTHORITY\SYSTEM
, que es un inicio de sesión existente para la base de datos de forma predeterminada.Editar: antes de aplicar esta sugerencia, debe tener en cuenta y comprender las implicaciones de seguridad.
fuente
asegúrese de tener ...
en tu conexión String
fuente
Resolví este problema usando sql como la siguiente imagen.
Haga clic derecho en db-> propiedades -> permiso -> Ver permiso del servidor -> y luego seleccione
IIS APPPOOL\ASP.NET v4.0
y otorgue permiso.fuente
Ejecute este script sql
fuente
Si en la cadena de conexión ha especificado:
pero en la cadena de conexión hay:
SQL Server usará la autenticación de Windows, por lo que sus valores de conexión serán ignorados y anulados (IIS usará la cuenta de Windows especificada en el perfil de usuario de Identity). Más información aquí
Lo mismo se aplica si en la cadena de conexión hay:
o
porque la autenticación de Windows se usará para conectarse al servidor de la base de datos. Más información aquí
fuente
vaya a iis -> grupos de aplicaciones -> encuentre el grupo de aplicaciones utilizado en la aplicación
seleccione el grupo de aplicaciones utilizado para la aplicación haga clic con el botón derecho seleccione configuración avanzada
Seleccionar identidad del grupo de aplicaciones
seleccione integrado como Sistema local y haga clic en Aceptar
fuente
Odio la ApplicationPoolIdentity. Siempre configuro una cuenta de usuario de Windows como la cuenta en AppPools.
Como dice a la deriva, suena como un problema de seguridad de la base de datos. Por lo tanto, cree una cuenta de usuario NT, asígnela al grupo de aplicaciones ASP.NET v4.0 y luego otórguele permiso en la carpeta del sitio web y en las tablas relevantes en SQL.
fuente
No use la seguridad integrada. Utilizar
User Id=yourUser; pwd=yourPwd;
Esto resuelve el problema.
fuente
Tuve este problema y en realidad fue causado por algo diferente: tenía el usuario 'IIS APPPOOL \ ASP.NET v4.0' en mi base de datos pero aún no funcionaba.
Recientemente actualicé mi instalación de SQL Server y, en el proceso, el usuario se desconectó del inicio de sesión, por lo que hubo un 'IIS APPPOOL \ ASP.NET v4.0' en Base de datos -> Seguridad -> Usuarios, pero ningún usuario no está en seguridad -> Inicios de sesión.
Se agregó el inicio de sesión 'IIS APPPOOL \ ASP.NET v4.0' a Seguridad -> Inicios de sesión, SQL Server lo asignó automáticamente al Usuario en la base de datos (esto solía hacerse manualmente) y se solucionó el problema.
fuente
Lo primero que debe borrar si está utilizando la autenticación de Windows y no está mencionando ninguna contraseña de nombre de usuario en su cadena de conexión:
Qué sucede cuando ejecuta su código a través de localhost: cuando ejecuta su cliente de prueba wcf desde localhost, podrá comunicarse con la base de datos cuando la aplicación del modo de depuración local llame a la base de datos por el servicio de su cuenta. Por lo tanto, tiene acceso a la base de datos porque devenv.exe se ejecuta en su cuenta de usuario.
Pero cuando implementa su servicio web en IIS. Ahora entienda que este servicio se ejecuta bajo IIS, no bajo su cuenta. Por lo tanto, debe asignar derechos de acceso al servicio IIS para acceder al servidor SQL para la autenticación de Windows. Aquí su servicio web no podrá comunicarse con el servidor SQL debido a un problema de derechos de acceso y Error de inicio de sesión para el usuario_______ (aquí vendrá su usuario)
Entonces, si está utilizando la autenticación de Windows para conectar su base de datos, solo tiene que cambiar la configuración del grupo de aplicaciones IIS. Debe cambiar la identidad del grupo de aplicaciones IIS al sistema local.
A continuación se detallan los Pasos para la autenticación de Windows WCF:
1) Abra IIS (windows + R (ejecutar) luego escriba inetmgr, luego haga clic en Aceptar)
2) haga doble clic en el nombre de su PC en Conexiones
3) Haga clic en Grupos de aplicaciones
4) Seleccione su grupo de aplicaciones (DefaultAppPool)
5) Luego, bajo acciones a la derecha, haga clic en Configuración avanzada:
6) Vaya a la sección Modelo de proceso y
7) haga clic en Identidad.
8) Ahora seleccione LocalSystem.
Ahora abra su estudio de administración de servidores sql: abra run-> luego escriba ssms -> luego presione ok En ssms, inicie sesión con su cuenta de autenticación de Windows. Abra la pestaña de seguridad, expanda la pestaña de inicios de sesión y luego podrá ver su cuenta.
Ahora abra las propiedades de su cuenta, vaya a userMapping, luego seleccione la base de datos que desea conectar y luego verifique los servicios de membresía de roles que desea usar para la base de datos seleccionada. haga clic en Aceptar.
(Para los servicios de red, es decir, los usuarios de la intranet, también debe configurar los ajustes anteriores para NT AUTHORITY \ SYSTEM user)
agregar Trusted_Connection = True; propiedad en su cadena de conexión. Guárdelo e implemente el servicio web. Reinicie el grupo de aplicaciones.
Ahora podrá conectar la base de datos.
fuente
Recibí este mensaje y uso la autenticación de Windows en el servidor web.
Quería que el usuario web actualmente autenticado se autenticara en la base de datos, en lugar de usar el usuario IIS APPPOOL \ ASP.NET v4 especificado en el grupo de aplicaciones.
Encontré lo siguiente en web.config lo arregló para mí:
https://msdn.microsoft.com/en-us/library/bsz5788z.aspx
Veo otras respuestas con respecto a la creación del nombre de usuario de AppPool en la base de datos SQL o simplemente para usar la autenticación de SQL. Ambos serían correctos si no quisiera capturar o proteger a los usuarios individuales de Windows dentro de SQL.
Tom
fuente
1_in SqlServer Security => Login => NT AUTHORITY \ SYSTEM => RightClick => Property => UserMaping => Select YourDatabse => Public && Owner Select => OK 2_In IIs Pool de aplicaciones DefaultAppPool => Configuración avanzada => Identity => LocalSystem => Ok
fuente
Establecer la identidad solo hace que esto funcione en mis páginas.
fuente
Cassini ejecuta su sitio web como su propia identidad de usuario cuando inicia la aplicación Visual Studio. IIS ejecuta su sitio web como una identidad de grupo de aplicaciones. A menos que la identidad del grupo de aplicaciones tenga acceso a la base de datos, obtendrá errores.
IIS presentó App Pool Identity para mejorar la seguridad. Puede ejecutar sitios web con la identidad predeterminada del grupo de aplicaciones, o crear un nuevo grupo de aplicaciones con su propio nombre, o crear un nuevo grupo de aplicaciones con su propio nombre que se ejecute bajo una cuenta de usuario (generalmente cuenta de dominio).
En situaciones de red (que no están en Azure) puede hacer que se ejecute un nuevo grupo de aplicaciones con una cuenta de usuario de dominio de Active Directory; Prefiero esto sobre la cuenta de la máquina. Hacerlo brinda seguridad granular y acceso granular a los recursos de la red, incluidas las bases de datos. Cada sitio web se ejecuta en un grupo de aplicaciones diferente (y cada uno de ellos se ejecuta bajo su propia cuenta de usuario de dominio).
Continúe usando Windows Integrated Security en todas las cadenas de conexión. En SQL Server, agregue los usuarios de Dominio como inicios de sesión y otorgue permisos a bases de datos, tablas, SP, etc. por sitio web. Por ejemplo, DB1 utilizado por el sitio web1 tiene un inicio de sesión para el usuario1 porque el sitio web1 se ejecuta en un grupo de aplicaciones como usuario1.
Un desafío con la implementación desde la base de datos incorporada de Visual Studio (por ejemplo, LocalDB) y el servidor web incorporado en un entorno de producción deriva del hecho de que el SID de usuario del desarrollador y sus ACL no deben usarse en un entorno de producción seguro. Microsoft proporciona herramientas para la implementación. Pero lástima el pobre desarrollador que está acostumbrado a todo lo que está funcionando de inmediato en el nuevo VS IDE fácil con localDB y localWebServer, porque estas herramientas serán difíciles de usar para ese desarrollador, especialmente para un desarrollador que carece de soporte SysAdmin y DBAdmin o sus conocimientos especializados No obstante, la implementación en Azure es más fácil que la situación de la red empresarial mencionada anteriormente.
fuente
Si tiene su cadena de conexión agregada en su web.config, asegúrese de que "Integrated Security = false;" entonces usaría la identificación y la contraseña especificadas en web.config.
fuente
Como se señaló, no use la autenticación de Windows, use la autenticación de SQL Server
Además, si creó una conexión utilizando el cuadro de diálogo "Conexión del servidor", asegúrese de verificar las conexiones en web.config. Es probable que haya creado / modificado la conexión y se haya almacenado como conexión de confianza en web.config. Simplemente use esta autenticación
que debería arreglar el error.
fuente
Otra forma de otorgar permiso a la base de datos para el usuario
IIS APPPOOL\ASP.NET v4.0
es la siguiente.IIS APPPOOL\ASP.NET v4.0
con su esquema predeterminado.fuente
Pensé en publicar esto como una respuesta, ya que es relevante para la pregunta y puede responderla en algunos casos.
Ese mismo mensaje aparece también si la base de datos no existe!
Asegúrese de que su cadena de conexión no tenga errores ortográficos, esté apuntando a la instancia correcta del servidor, etc.
fuente
Tengo el mismo problema que lo resolví cambiando
Integrated Security=True
a falso ahora funcionafuente
me sucedió algo similar, lo que funcionó para mí fue cambiar la propiedad Seguridad integrada = Verdadero a Seguridad integrada = falso en la configuración web del sitio web
fuente
¿Has hecho lo
@Teddy
recomendado y TODAVÍA obtienes el mismo error?Asegúrese de cambiar la configuración del grupo de aplicaciones que corresponde a su directorio virtual y no al servidor principal. Cada directorio virtual tiene su propio AppPool y no hereda.
fuente
En DefaultAppPool, configure NetworkService en la propiedad Identity y en Sql Server agregue User Network Service y dele los permisos adecuados a su base de datos, eso funciona muy bien para mí, lo he probado localmente pero creo que esta es la mejor configuración para conectarse desde cualquier otra computadora en la red. cuando configura LocalSystem en Identity en IIS, eso funciona bien y no es necesario crear ningún otro usuario en SQL Server, pero creo que eso no funcionará en un entorno de red.
fuente
Me encontré con el mismo problema al probar la API web ASP.NET
Desarrollado Web.Host en Visual Studio 2013 Express Base de datos creada en SQL Server 2012 Express Ejecución de prueba usando IIS Express integrado (funcionando) Modificado para usar IIS Local (desde la página de propiedades - opción web) Prueba de rangos con Fiddler Error recibido - no se puede abrir la base de datos para el proveedor ... citando 'APPPOOL \ DefaultAppPool'
Solución que funcionó.
En IIS
Haga clic en el grupo de aplicaciones 'DefaultAppPool' Establecer Identificar = 'ApplicationPoolIdentity' Establecer .NET framework = v4.0 (aunque mi aplicación era 4.5)
En SQL Server Management Studio
Haga clic con el botón derecho en la carpeta Seguridad (en el motor de SQL Server, por lo que se aplica a todas las tablas). Haga clic con el botón derecho en Usuario y agregue 'IIS APPPOOL \ DefaultAppPool'. Con respecto a lo anterior, si usted es un DBA, probablemente conozca y quiera controlar cuáles son esas opciones. Si usted es como yo, un desarrollador solo quería probar su servicio de API WEB, que también tiene acceso a SQL Server a través de EF 6 en estilo MVC, simplemente marque todo. :) Sí, lo sé pero funcionó.
fuente
En caso de que agregue un nuevo inicio de sesión, asegúrese de que en las propiedades del servidor (clic derecho -> propiedades) / seguridad, el modo de autenticación esté configurado tanto para sqlserver como para windows, no solo windows.
fuente
Agregue "Todos" bajo seguridad. Si agregó el Servidor y los usuarios que inician sesión en la base de datos, esto es algo que le falta. Espero que esto ayude.
fuente
Para el registro, si encuentra este error después de cambiar de
LocalDB
aSQLEXPRESS
, asegúrese de que la base de datos ya esté enSQLEXPRESS
. Puede verificar esto en Management Studio.Tuve el mismo problema al usar
Entity Framework
después de cambiar aSQLEXPRESS from LocalDB
. Tuve que ejecutar elUpdate-Database
comando. Pude conectarme con éxito después de eso.fuente
Hice exactamente lo que dijo @JeffOgata pero recibí el error:
Miré mi mensaje de error nuevamente y decía
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
Después de agregar un usuario llamado
IIS APPPOOL\DefaultAppPool
todo funcionó.fuente
Usé SQL Server Profiler (disponible en SSMS => menú Herramientas) y vi (cuando IIS intentó conectarse a la base de datos) que mi usuario de IIS era por alguna razón NT AUTHORITY \ IUSR, sin importar todos los pasos recomendados en las respuestas de esta pregunta . Así que agregué ese usuario a SQL Server, y funcionó ...
fuente
En el formulario web Asp.net,
Este error se solucionó al instalar asp.net desde:
El Administrador del servidor> Administrar> Agregar función y función> Funciones del servidor> Servidor web (IIS)> Servidor web> Desarrollo de aplicaciones> ASP.NET 3.5 / 4.6 está instalado.
mi problema solucionado
fuente