2009-08-13 83 views
13

Mi aplicación web ASP.NET v3.5 lanza la siguiente excepción cuando intenta abrir una conexión a un servidor SQL 2008 base de datos:Error "Error de inicio de sesión del usuario 'NT AUTHORITY IUSR'" en ASP.NET y SQL Server 2008

System.Data.SqlClient.SqlException: no puede abrir la base de datos "MyDbName" solicitada por el inicio. El inicio de sesión ha fallado. Error de inicio de sesión para el usuario 'NT AUTHORITY \ IUSR'.

Lo que pasa es que he agregado NT AUTHORITY\IUSR a la lista de inicios de sesión del servidor ya la lista de usuarios de la base de datos. Para el servidor, otorgué al usuario el rol Público, y para la base de datos otorgué db_datareader permisos.

También he concedido lo mismo para NT AUTHORITY\NETWORK SERVICE, que es la identidad con la que se ejecuta el grupo de aplicaciones.

La aplicación web está alojada por IIS7, si eso hace la diferencia. El problema se repros cuando DB e IIS están en la misma máquina física también.

Respuesta

6

El truco aquí es que NT AUTHORITY\NETWORK SERVICE aparece realmente en la base de datos como DOMAINNAME\MACHINENAME$ (observe el signo $). Es decir, cuando cruza el límite de la máquina de su servidor web a SQL Server, SQL Server ve la cuenta de la máquina si usa las cuentas NETWORK SERVICE o LOCAL SYSTEM. Si usa cualquier otra cuenta que no sea de dominio, SQL Server no recibirá sus credenciales.

Estoy un poco confundido por su mensaje de error. A decir verdad, no creo que cuando la base de datos esté en otra caja, verá algo más que Login Failed for NT AUTHORITY\ANONYMOUS LOGON.

IUSR se utiliza para sitios web anónimos, y no puede pasar el cable a SQL Server. Puede encontrar una forma de que funcione si está haciendo todo en la misma máquina, pero nunca lo sabría porque nunca lo haría de esa manera ... ;-)

+1

sólo estaba probando para ver si va todo el trabajo en la misma caja - en la producción de la topología se describe mejor como desmadejado. De todos modos, lo has conseguido: tuve que agregar permisos para machineName $. ¡Gracias! –

+1

Solo quería agregar que, de manera similar, resolví este problema creando permisos para el nombre de usuario IUSER que se encuentra en los sitios web de IIS 6.0-> Propiedades-> Seguridad del directorio-> Editar (Autenticación ...) que era IUSR_MACHINENAME – shawad

+0

¿Cómo agregó permisos para el MachineName $ en VS –

1

Yo sugeriría crear una cuenta separada (preferentemente dominio) y especifíquela en la cadena de conexión (generalmente en web.config) Luego puede limitar los permisos en el servidor web lo que esta cuenta puede y no puede hacer. A continuación, puede otorgar a esta cuenta los permisos necesarios en el servidor SQL.

-1

La solución más sencilla es comprobar su archivo web.config y asegurarse de que uno de ellos es parte de la cadena de conexión db:

conexión de confianza = false

O

seguridad integrada = True

1

Tuve el mismo problema y resolví esto cambiando el grupo de aplicaciones.

-2

Este problema se muestra cuando restaura una nueva base de datos en su última base de datos.

Para resolver esto, debe dirigirse a sqlserver, luego a seguridad y luego configurar de nuevo su apppool.

1

En caso de que ayude a alguien, en web.config agregué < identity impersonate = "false" /> para que este error desaparezca (en el sistema <.Web>)

0

En lugar de utilizar Integrated Security=True; en cadena de conexión, sólo tiene que utilizar nombre de usuario y contraseña de autenticación user=sa; pwd=mypassword;

+0

¡No! No puede recomendar el uso de nombre de usuario y contraseña cuando hay un caso de uso diferente, como autorizar con la cuenta de la máquina. –

Cuestiones relacionadas