c# deploy - Error de inicio de sesión para el usuario 'IIS APPPOOL \ ASP.NET v4.0'




website iis7 (25)

Tengo un proyecto web (C # Asp.Net, EF 4, MS SQL 2008 e IIS 7) y necesito migrarlo a IIS 7 localmente (actualmente funciona bien con CASSINI).

Localmente en IIS tengo mi Default Web Site con mi implementación. Tanto mi implementación como el Default Web Site están en el grupo ASP.NET v4.0 (buscar imagen para configuraciones) en el grupo de destino 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 en su lugar.

Tengo otros proyectos que se ejecutan en IIS localmente y funcionan sin problemas (pero no usan Entity Framework).

Usando el registrador de eventos veo los errores de la siguiente manera:

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)

Pregunta relacionada

ACTUALIZACIÓN: Puede leer en los recursos sobre esta pregunta que los permisos se deben otorgar en MS SQL 2008 manualmente como se explica en su respuesta. Al utilizar IIS 7.5 y MS SQL 2008 R2, no debería ser necesario configurar manualmente los permisos.


Answers

En DefaultAppPool, establezca NetworkService en la propiedad Identity y en Sql Server agregue User Network Service y asígnele los permisos apropiados para su base de datos, eso me funciona muy bien, lo he probado localmente, pero creo que esta es la mejor configuración para conectarse desde cualquier Otra computadora en la red. cuando establece LocalSystem en la Identidad en IIS, funciona bien y no es necesario crear ningún otro usuario en el Servidor SQL, pero creo que no funcionará en un entorno de red.


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 había actualizado mi instalación de SQL Server y, en el proceso, el usuario se había desconectado del inicio de sesión, por lo que había un 'IIS APPPOOL \ ASP.NET v4.0' en Base de datos -> Seguridad -> Usuarios PERO ningún usuario no está bajo 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 de forma manual) y se solucionó el problema.


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 a la Identidad de grupo de aplicaciones se le otorgue acceso a la base de datos, obtendrá errores.

IIS introdujo la identidad del grupo de aplicaciones para mejorar la seguridad. Puede ejecutar sitios web con la Identidad de grupo de aplicaciones predeterminada, 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 un nuevo Grupo de aplicaciones se ejecute con una cuenta de usuario de dominio de Active Directory; Prefiero esto sobre la cuenta de la máquina. Al hacerlo, proporciona seguridad granular y acceso granular a los recursos de 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 la seguridad integrada de Windows en todas las cadenas de conexión. En SQL Server, agregue los usuarios del dominio como inicios de sesión y otorgue permisos a bases de datos, tablas, SP, etc. por sitio web. Por ejemplo, DB1 utilizado por Website1 tiene un inicio de sesión para User1 porque Website1 se ejecuta en un grupo de aplicaciones como User1.

Un desafío con la implementación desde la base de datos integrada de Visual Studio (por ejemplo, LocalDB) y el servidor web incorporado a un entorno de producción se deriva del hecho de que el SID de usuario del desarrollador y sus ACL no se deben usar en un entorno de producción seguro. Microsoft proporciona herramientas para la implementación. Pero compadezca al pobre desarrollador que está acostumbrado a todo, simplemente trabajando fuera de la caja en el nuevo y sencillo IDE de VS con localDB y localWebServer, porque estas herramientas serán difíciles de usar para ese desarrollador, especialmente para un desarrollador que carece de soporte para SysAdmin y DBAdmin o Su conocimiento especializado. No obstante, la implementación en Azure es más fácil que la situación de red empresarial mencionada anteriormente.


Hice exactamente como dijo @JeffOgata pero me salió el error:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

Miré mi mensaje de error otra vez y dije que el Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Después de agregar un usuario llamado IIS APPPOOL\DefaultAppPool todo funcionó.


¿Has hecho lo que recomendó @Teddy y TODAVÍA recibes 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.


En el formulario web de Asp.net,

este error se solucionó al instalar asp.net desde:

Administrador del servidor> Administrar> Agregar rol y característica> Roles del servidor> Servidor web (IIS)> Servidor web> Desarrollo de aplicaciones> ASP.NET 3.5 / 4.6 está instalado.

mi problema solucionado


Puede cambiar ApplicationPoolIdentity desde IIS7 -> Grupos de aplicaciones -> Configuración avanzada.

En ApplicationPoolIdentity encontrará el sistema local. Esto hará que su aplicación se ejecute bajo NT AUTHORITY\SYSTEM , que es un inicio de sesión existente para la base de datos por defecto.

Edición: antes de aplicar esta sugerencia, debe tener en cuenta y comprender las implicaciones de seguridad.


No utilice la seguridad integrada. Use User Id=yourUser; pwd=yourPwd; User Id=yourUser; pwd=yourPwd;

Esto resuelve el problema.


Parece que está fallando al intentar abrir una conexión a SQL Server.

IIS APPPOOL\ASP.NET v4.0 agregar un inicio de sesión a SQL Server para IIS APPPOOL\ASP.NET v4.0 y conceder 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 del grupo de aplicaciones, seleccionar Propiedades y seleccionar "Asignación de usuarios". Compruebe la base de datos apropiada y los roles apropiados. Creo que solo podría seleccionar db_datareader y db_datawriter , pero creo que aún tendría que otorgar permisos para ejecutar procedimientos almacenados si lo hace a través de EF. Puedes consultar los detalles de los roles here .


En caso de que agregue un nuevo inicio de sesión, asegúrese de que bajo las propiedades del servidor (clic derecho -> propiedades) / seguridad, el modo de autenticación está configurado para sqlserver y windows no solo windows.


Añadir "Todos" bajo seguridad. Si agregó el Servidor y los usuarios que inician sesión en la base de datos, entonces esto es algo que falta. Espero que esto ayude.


vaya a iis -> grupos de aplicaciones -> encuentre su grupo de aplicaciones utilizado en la aplicación

seleccione su grupo de aplicaciones utilizado para la aplicación haga clic con el botón derecho seleccione configuración avanzada

Seleccione la identidad del grupo de aplicaciones

Seleccione integrado como sistema local y haga clic en Aceptar


Recibí este mensaje y uso la autenticación de Windows en el servidor web.

Quería que el usuario web autenticado actualmente fuera autenticado en la base de datos, en lugar de utilizar el Usuario IIS APPPOOL \ ASP.NET v4 especificado en el Grupo de Aplicaciones.

Lo encontré ingresando lo siguiente en el archivo .config arreglado esto para mí:

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

Veo otras respuestas relacionadas con la creación del nombre de usuario de AppPool en la base de datos de SQL o simplemente para usar la autenticación de SQL. Ambos serían correctos si no quisiera capturar o proteger a usuarios individuales de Windows dentro de SQL.

Tom


Puede enfrentar este error en una base de datos específica que se crea después de la actualización de SSMS. Abra SSMS y seleccione sus bases de datos y abra su base de datos requerida, luego haga clic en Seguridad -> Usuarios -> y haga clic con el botón derecho en Usuarios y haga clic nuevamente en 'Nuevo usuario' y agregue 'AUTORIDAD DE NT \ Usuarios autenticados' y guarde su trabajo y vaya a su formulario en la web / escritorio lo que sea. Disfrutar....


Para el registro, si encuentra este error después de cambiar de LocalDB a SQLEXPRESS , asegúrese de que la base de datos ya esté en SQLEXPRESS . Puedes verificar esto en Management Studio.

Tuve el mismo problema al usar Entity Framework después de cambiar a SQLEXPRESS from LocalDB . Tuve que ejecutar el comando Update-Database . Pude conectarme con éxito después de eso.


Me encontré con el mismo problema al probar ASP.NET Web API

Desarrollado Web.Host en Visual Studio 2013 Express Base de datos creada en SQL Server 2012 Express Prueba ejecutada utilizando IIS Express integrado (en funcionamiento) Modificado para usar IIS local (desde la página de propiedades - opción web) Prueba de prueba 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' Set Identify = 'ApplicationPoolIdentity' Set .NET framework = v4.0 (aunque mi aplicación era 4.5)

En SQL Server Management Studio

Haga clic derecho en la carpeta Seguridad (bajo el motor de SQL Server, de modo que se aplica a todas las tablas) Haga clic derecho en Usuario y agregue 'IIS APPPOOL \ DefaultAppPool' En securables en la columna 'Otorgar' verifique las opciones que desea dar. Con respecto a lo anterior, si usted es un DBA, probablemente sepa y quiera controlar cuáles son esas opciones. Si eres como yo, un desarrollador solo quería probar tu servicio de API WEB, el cual también tiene acceso a SQL Server a través de EF 6 en el estilo MVC y luego marca todo. :) Sí, lo sé, pero funcionó.


Me he enfrentado a un problema similar al alojar la aplicación en IIS

Solución

Cambio la identidad de la piscina y su trabajo me

ApplicationPoolIdentity -> NetworkService

Ejecutar este script sql

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

Si en la cadena de conexión ha especificado:

User ID=xxx;Password=yyy

pero en la cadena de conexión hay:

Trusted_Connection=true;

SQL Server usará la autenticación de Windows, por lo que sus valores de conexión se ignorarán y se anularán (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:

 Integrated Security = true;

o

 Integrated Security = SSPI;

porque la autenticación de Windows se utilizará para conectarse al servidor de base de datos. más información aquí


Utilicé el SQL Server Profiler (disponible en el menú SSMS => 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 a esta pregunta . Así que agregué ese usuario a SQL Server, y funcionó ...


Si tiene la cadena de conexión agregada en su web.config, asegúrese de que "Integrated Security = false;" por lo que usaría el ID y la contraseña especificados en web.config.

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>

asegúrate de que tienes ...

Trusted_Connection=false;

en su cadena de conexión


Resolví este problema usando SQL como la siguiente imagen.

Haga clic con el botón derecho en db-> propiedades -> permiso -> Ver permiso del servidor -> y luego seleccione IIS APPPOOL\ASP.NET v4.0 y conceda el permiso.


Odio el ApplicationPoolIdentity. Siempre configuro una cuenta de usuario de Windows como la cuenta en AppPools.

Como dice la deriva, suena como un problema de seguridad de base de datos. Así que cree una cuenta de usuario de NT, asígnele el ASP.NET v4.0 AppPool y luego concédale el permiso en la carpeta del sitio web y las tablas relevantes en SQL.


Escribí un método de extensión para resolver esta tarea:

public static bool ContainsKey(this NameValueCollection collection, string key)
{
    if (collection.AllKeys.Contains(key)) 
        return true;

     // ReSharper disable once AssignNullToNotNullAttribute
    var keysWithoutValues = collection.GetValues(null);
    return keysWithoutValues != null && keysWithoutValues.Contains(key);
}




c# asp.net iis-7 web-config