c# - mvc - publish asp.net web api to iis




Error de inicio de sesión para el usuario 'IIS APPPOOL \ ASP.NET v4.0' (20)

¿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.

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.


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.


Como se señaló, no use la autenticación de Windows, use la autenticación de SQL Server

Además, si creó la conexión con 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 que se haya almacenado como conexión de confianza en web.config. Simplemente usa esta autenticación

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

lo que debería arreglar el error.


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

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.


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


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ó.


Lo primero que debe aclarar si está utilizando la autenticación de Windows y no menciona ninguna contraseña de nombre de usuario en su cadena de conexión, entonces:

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 ya que la aplicación en modo de depuración local está llamando 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 bajo su cuenta de usuario.

Pero cuando implementas tu 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í llegará su usuario)

Entonces, si está usando la autenticación de Windows para conectar su base de datos, solo tiene que cambiar la configuración del grupo de aplicaciones de IIS. Debe cambiar la identidad del grupo de aplicaciones de IIS al sistema local.

A continuación, se encuentran los pasos para la autenticación de Windows WCF: • Abra IIS (windows + R (ejecutar), escriba inetmgr, luego haga clic en Aceptar) • haga doble clic en el nombre de su PC en Conexiones • Haga clic en Grupos de aplicaciones • Seleccione su grupo de aplicaciones (DefaultAppPool) • Luego debajo acciones en el botón derecho Configuración avanzada: • Vaya a la sección Modelo de proceso y • haga clic en Identidad. • Ahora seleccione LocalSystem.

Ahora abra su estudio de administración de servidor SQL: abra ejecutar-> luego escriba ssms luego presione ok en ssms, inicie sesión con su cuenta de autenticación de Windows. abrir la pestaña de seguridad expandir la pestaña de inicio de sesión, entonces podrá ver su cuenta.

Ahora abra las propiedades de su cuenta vaya a userMapping, luego seleccione la base de datos que desea conectar, luego verifique los servicios de membresía que desea usar para la base de datos seleccionada y haga clic en Aceptar. (Para los servicios de red, es decir, los usuarios de la intranet, debe configurar los ajustes anteriores para el usuario NT AUTHORITY \ SYSTEM también)

agregar Trusted_Connection = True; Propiedad en su cadena de conexión. Guárdalo e implementa el servicio web. Reiniciar el grupo de aplicaciones.

Ahora podrás conectar la base de datos.


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

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

Esto resuelve el problema.


Otra forma de otorgar permiso a la base de datos para el usuario IIS APPPOOL\ASP.NET v4.0 es la siguiente.


  1. Agregue un nuevo usuario con nombre de usuario y nombre de inicio de sesión como IIS APPPOOL\ASP.NET v4.0 con su esquema predeterminado.
  2. Vaya al esquema y la membresía del propietario, consulte db_datareader, db_datawriter

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.


Pensé que publicaría esto como una respuesta, ya que es relevante para la pregunta y puedo responderla en algunos casos.

¡Ese mismo mensaje aparece también si la base de datos no existe!

Asegúrese de que la cadena de conexión no tenga errores ortográficos, apunte a la instancia de servidor correcta, etc.


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.


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


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.


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>

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.


asegúrate de que tienes ...

Trusted_Connection=false;

en su cadena de conexión


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