.net - Error de inicio de sesión para el usuario ''DOMAIN / MACHINENAME $''
sql-server sql-server-2005 (15)
Sé que esto es casi duplicado de: El error "Error al iniciar sesión para el usuario ''NT AUTHORITY / IUSR''" en ASP.NET y SQL Server 2008 y el inicio de sesión falló para el usuario ''nombre de usuario'' - System.Data.SqlClient.SqlException con LINQ en externo biblioteca de proyecto / clase, pero algunas cosas no suman en comparación con otras aplicaciones en mi servidor y no estoy seguro de por qué.
Cajas utilizadas:
Web Box
Cuadro de SQL
Cuadro de prueba SQL
Mi aplicación:
Tengo una aplicación web ASP.NET, que hace referencia a una biblioteca de clases que utiliza LINQ-to-SQL. Cadena de conexión configurada correctamente en la biblioteca de clases. De acuerdo con el inicio de sesión fallido para el usuario ''nombre de usuario'' - System.Data.SqlClient.SqlException con LINQ en la biblioteca de proyectos / clases externas, también agregué esta cadena de conexión a la aplicación web.
La cadena de conexión usa las credenciales de SQL como tal (tanto en la aplicación web como en la biblioteca de clases):
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
Esta conexión confirmó que funciona al agregarla al explorador del servidor. Esta es la cadena de conexión que está usando mi archivo .dbml.
El problema:
Obtuve el siguiente error:
System.Data.SqlClient.SqlException: Login failed for user ''DOMAIN/MACHINENAME$''.
Ahora haciendo referencia a esto El error "Error de inicio de sesión para el usuario ''NT AUTHORITY / IUSR''" en ASP.NET y SQL Server 2008 dice que realmente es el servicio de red local y que usar cualquier otro nombre que no sea de dominio no funcionará.
Pero estoy confundido porque he comprobado tanto SQL Box como SQL Test Box SQL Management Studio y ambos tienen NT AUTHORITY/NETWORK SERVICE
en Seguridad -> Inicios de sesión, a nivel de base de datos, que no aparece en Seguridad -> Usuarios, pero en el nivel de la base de datos Seguridad -> Usuarios Tengo el usuario mostrado en la cadena de conexión.
En el nivel NTFS en el servidor web, los permisos tienen el SERVICIO DE RED tiene control total.
La razón por la que estoy confundido es porque tengo muchas otras aplicaciones web en mi servidor web, que las bases de datos de referencia en SQL Box y SQL Test Box, y todas funcionan. Pero no puedo encontrar una diferencia entre ellos y mi aplicación actual, salvo que estoy usando una biblioteca de clases. ¿Eso importa? Verificación de permisos NTFS, configuración de inicios de sesión de seguridad en el servidor y niveles de bases de datos, cadena de conexión y método de conexión (credenciales de SQL Server) y grupo de aplicaciones IIS y otras opciones de carpeta, son todos iguales.
¿Por qué funcionan estas aplicaciones sin agregar machinename $ a los permisos de ninguno de mis cuadros de SQL? Pero eso es lo que el enlace me dice que haga para solucionar este problema.
Añadí <identity impersonate="true" />
a mi web.config y funcionó bien.
Básicamente para resolver esto, necesitamos tener un poco de configuración como
- Aplicación web que se ejecuta en ApplicationPoolIdentity
- Aplicación web que se conecta a bases de datos a través de ADO.Net usando la Autenticación de Windows en la cadena de conexión
La cadena de conexión utilizada con la autenticación de Windows incluye el atributo Trusted_Connection=Yes
o el atributo equivalente Integrated Security=SSPI
en el archivo Web.config
Mi conexión a la base de datos está en el modo de Autenticación de Windows. Así que lo resolví simplemente cambiando la identidad de las pools de aplicaciones de ApplicationPoolIdentity a las credenciales de inicio de sesión de mi dominio DomainName / MyloginId
Paso:
- Haga clic en Grupos de aplicaciones
Seleccione el nombre de su aplicación
Ir a configuración avanzada
- Expanda Modelo de proceso y haga clic en Identidad . Haga clic en tres puntos en el extremo derecho.
- Haga clic en el botón Establecer ... y proporcione las credenciales de inicio de sesión de su dominio
Para mí fue resuelto.
Nota: En el entorno de producción o de TI, es posible que tenga una cuenta de servicio bajo el mismo dominio para la identidad del conjunto de aplicaciones. De ser así, use la cuenta de servicio en lugar de su inicio de sesión.
El único punto que todos parecen haber pasado por alto es que tal vez desee una seguridad integrada = verdadera. Puede hacer que el sitio se ejecute bajo una cuenta de grupo. Eso está bien así y aún es posible acceder al servidor SQL con la credencial del usuario original y no del grupo. Se llama delegación restringida. Si lo habilita y configura un SPN Windows traducirá las credenciales del grupo con las solicitudes del usuario que van al servicio final (SQL es solo uno de esos servicios). Debe registrar el ÚNICO y único servidor SQL que atiende las solicitudes de SQL en el servidor web. Configurar todo esto es demasiado para que intente describir con precisión aquí. Me tomó bastante tiempo para resolverlo yo mismo.
El truco que funcionó para mí fue eliminar Integrated Security
de mi cadena de conexión y agregar una User ID=userName; Password=password
regular User ID=userName; Password=password
User ID=userName; Password=password
su cadena de conexión en el App.config
de su libruary podría no estar usando seguridad integrada, ¡pero la creada en Web.config
está!
En mi caso, Identity="ApplicationPoolIdentity"
para mi grupo de aplicaciones de IIS.
Después de que agregué el IIS APPPOOL/ApplicationName
a SQL Server, funciona.
Este error ocurre cuando ha configurado su aplicación con IIS, e IIS va a SQL Server e intenta iniciar sesión con credenciales que no tienen los permisos adecuados. Este error también puede ocurrir cuando se configura la duplicación o duplicación. Examinaré una solución que funciona siempre y es muy simple. Vaya a SQL Server >> Seguridad >> inicios de sesión y haga clic derecho en NT AUTHORITY / NETWORK SERVICE y seleccione Propiedades
En la pantalla recién abierta de Propiedades de inicio de sesión, vaya a la pestaña "Asignación de usuario". Luego, en la pestaña "User Mapping", seleccione la base de datos deseada, especialmente la base de datos para la cual se muestra este mensaje de error. En la pantalla inferior, compruebe el rol db_owner. Haga clic en Aceptar.
Hemos estado recibiendo mensajes de error similares al procesar una base de datos de Analysis Services. Resultó que el nombre de usuario, que se utilizó para ejecutar la instancia de Analysis Services, no se había agregado a los inicios de sesión de seguridad del servidor SQL.
En SQL Server 2012, los servicios de SQL Server y Analysis están configurados para ejecutarse como usuarios diferentes de forma predeterminada. Si se fue con los valores predeterminados, siempre asegúrese de que el usuario AS tenga acceso a su fuente de datos.
NETWORK SERVICE y LocalSystem se autenticarán siempre como la cuenta correspondiente localmente (servicio integrado / servicio de red y sistema integrado) pero ambos se autenticarán como la cuenta de la máquina remotamente.
Si ve una falla como Error de Login failed for user ''DOMAIN/MACHINENAME$''
, significa que un proceso que se ejecuta como NETWORK SERVICE o LocalSystem ha accedido a un recurso remoto, se ha autenticado como la cuenta de la máquina y se le denegó la autorización.
Un ejemplo típico sería una aplicación ASP ejecutándose en un grupo de aplicaciones para usar la credencial de NETWORK SERVICE y conectarse a un SQL Server remoto: el grupo de aplicaciones se autenticará como el equipo que ejecuta el grupo de aplicaciones, y es esta cuenta de máquina a la que se debe otorgar acceso .
Cuando se deniega el acceso a una cuenta de máquina, se debe otorgar acceso a la cuenta de la máquina. Si el servidor se niega a iniciar sesión en ''DOMAIN / MACHINE $'', entonces debe otorgar derechos de inicio de sesión a ''DOMAIN / MACHINE $'' no a NETWORK SERVICE. Conceder acceso al SERVICIO DE RED permitiría que un proceso local que se ejecuta como SERVICIO DE RED se conecte, no uno remoto, ya que el remoto se autenticará como, adivinó, DOMINIO / MÁQUINA $.
Si espera que la aplicación asp se conecte al SQL Server remoto como un inicio de sesión de SQL y obtiene excepciones sobre DOMAIN / MACHINE $, significa que usa Integrated Security en la cadena de conexión. Si esto es inesperado, significa que ha estropeado las cadenas de conexión que usa.
Para mí, el problema se resolvió cuando reemplacé la cuenta predeterminada predeterminada, ''ApplicationPoolIdentity'', con una cuenta de red a la que se permitió el acceso a la base de datos.
La configuración se puede realizar en Internet Information Server (IIS 7+)> Grupos de aplicaciones> Configuración avanzada> Modelo de proceso> Identidad
Pasé unas horas intentando solucionar el problema y finalmente lo conseguí: el navegador del servidor SQL estaba "detenido". La solución es cambiarlo al modo "Automático":
Si está deshabilitado, vaya a Panel de control-> Herramientas administrativas-> Servicios, y busque el Agente de SQL Server. Haga clic con el botón derecho y seleccione "Propiedades". Desde el menú desplegable "Tipo de inicio", cambie de "Deshabilitado" a "Automático".
cita de aquí
También tuve este error con un usuario autenticado de SQL Server
Intenté algunas de las correcciones, pero no funcionaron.
La solución en mi caso fue configurar su "Modo de Autenticación del Servidor" para permitir la autenticación de SQL Server, en Management Studio: Propiedades / Seguridad.
Tuve el mismo problema antes, la eliminación de Persist Security Info=True
de connectionstring funcionó para mí.
Un colega tuvo el mismo error y se debió a un pequeño error de configuración en IIS.
El grupo de aplicaciones incorrecto se asignó a la aplicación web.
De hecho, utilizamos un grupo de aplicaciones personalizado con una identidad específica para satisfacer nuestras necesidades.
En su Administrador local de IIS -> Sitios -> Sitio web predeterminado -> Nuestro nombre de la aplicación web -> Configuración básica ... El grupo de aplicaciones era "DefaultAppPool" en lugar de nuestro grupo de aplicaciones personalizado.
Establecer el grupo de aplicaciones correcto resolvió el problema.
Verifica si tienes
User Instance=true
en la cadena de conexión. Intenta eliminarlo, lo que resolverá tu problema.