Sé que esto es casi un duplicado de: El error "Error de inicio de sesión para el usuario 'NT AUTHORITY \ IUSR'" en ASP.NET y SQL Server 2008 y error de inicio de sesión para el usuario 'nombre de usuario' - System.Data.SqlClient.SqlException con LINQ en Proyecto externo / biblioteca de clases, pero algunas cosas no cuadran en comparación con otras aplicaciones en mi servidor y no estoy seguro de por qué.
Cajas que se utilizan:
Caja web Caja
SQL Caja de
prueba SQL
Mi aplicación:
Tengo una aplicación web ASP.NET, que hace referencia a una biblioteca de clases que usa LINQ-to-SQL. Cadena de conexión configurada correctamente en la biblioteca de clases. Según el inicio de sesión fallido para el usuario 'nombre de usuario' - System.Data.SqlClient.SqlException con LINQ en un proyecto externo / biblioteca de clases , también agregué esta cadena de conexión a la aplicación web.
La cadena de conexión usa credenciales 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" />
Se confirmó que esta conexión funciona al agregarla al Explorador de servidores. Esta es la cadena de conexión que usa 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 es realmente el servicio de red local y que el uso de cualquier otro nombre que no sea de dominio no funcionará.
Pero estoy confundido porque he marcado SQL Box y SQL Test Box SQL Management Studio y ambos tienen NT AUTHORITY/NETWORK SERVICE
en Seguridad -> Inicios de sesión, en el nivel de la 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.
A 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 hacen referencia a bases de datos tanto en SQL Box como en SQL Test Box, y todas funcionan. Pero no puedo encontrar una diferencia entre ellos y mi aplicación actual, aparte de que estoy usando una biblioteca de clases. ¿Importará eso? La verificación de los permisos NTFS, la configuración de los inicios de sesión de seguridad en los niveles del servidor y de las bases de datos, la cadena de conexión y el método de conexión (credenciales de SQL Server), el grupo de aplicaciones IIS y otras opciones de carpeta son todos iguales.
¿Por qué estas aplicaciones funcionan sin agregar el nombre de máquina $ a los permisos de cualquiera de mis cuadros SQL? Pero eso es lo que me dice el enlace para solucionar este problema.
fuente
Respuestas:
NETWORK SERVICE y LocalSystem se autenticarán siempre como la cuenta correspondiente localmente (servicio de red incorporado y sistema incorporado) pero ambos se autenticarán como la cuenta de la máquina de forma remota.
Si ves un fracaso como
Login failed for user 'DOMAIN\MACHINENAME$'
, significa que un proceso que se ejecuta como SERVICIO DE RED o como LocalSystem ha accedido a un recurso remoto, se ha autenticado a sí mismo como la cuenta de la máquina y se le negó la autorización.Un ejemplo típico sería una aplicación ASP que se ejecuta en un grupo de aplicaciones configurado para usar la credencial de SERVICIO DE RED y conectarse a un servidor SQL remoto: el grupo de aplicaciones se autenticará como la máquina que ejecuta el grupo de aplicaciones, y esta cuenta de máquina debe tener acceso .
Cuando se deniega el acceso a una cuenta de máquina, se debe otorgar acceso a la cuenta de máquina. Si el servidor se niega a iniciar sesión en 'DOMINIO \ MÁQUINA $', debe otorgar derechos de inicio de sesión a 'DOMINIO \ MÁQUINA $', no al SERVICIO DE RED. Otorgar acceso al SERVICIO DE RED permitiría a un local que se conectara proceso se ejecuta como SERVICIO DE RED, no uno remoto, ya que el remoto se autenticará como, supuso, DOMINIO \ MÁQUINA $.
Si espera que la aplicación asp se conecte al SQL Server remoto como un inicio de sesión SQL y obtiene excepciones sobre DOMINIO \ MÁQUINA $, significa que usa Seguridad integrada en la cadena de conexión. Si esto es inesperado, significa que arruinó las cadenas de conexión que usa.
fuente
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 replicación o el reflejo. Voy a repasar una solución que siempre funciona y es muy simple. Vaya a SQL Server >> Seguridad >> Inicio 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 usuarios". Luego, en la pestaña "Asignación de usuarios", seleccione la base de datos deseada, especialmente la base de datos para la que se muestra este mensaje de error. En la pantalla inferior, marque el rol db_owner. Haga clic en Aceptar.
fuente
En mi caso tuve
Identity="ApplicationPoolIdentity"
para mi grupo de aplicaciones IIS.Después de agregar un
IIS APPPOOL\ApplicationName
usuario a SQL Server, funciona.fuente
Básicamente, para resolver esto, necesitamos configurar algunos como
La cadena de conexión utilizada con la autenticación de Windows incluye un
Trusted_Connection=Yes
atributo o el atributo equivalenteIntegrated Security=SSPI
en elWeb.config
archivoMi conexión a la base de datos está en modo de autenticación de Windows. Así que decidí que simplemente cambiando los grupos de aplicaciones de identidad de ApplicationPoolIdentity a mi registro de dominio en las credenciales de dominio \ myloginid
Paso:
Seleccione el nombre de su aplicación
Ir a Configuración avanzada
Para mí estaba resuelto.
Nota: En el entorno de producción o de TI, es posible que tenga una cuenta de servicio en el mismo dominio para la identidad del grupo de aplicaciones. Si es así, use la cuenta de servicio en lugar de su inicio de sesión.
fuente
El truco que funcionó para mí fue eliminar
Integrated Security
de mi cadena de conexión y agregar unaUser ID=userName; Password=password
cadena de conexión regular en laApp.config
de su biblioteca. ¡Es posible que no esté usando seguridad integrada, pero la creada en síWeb.config
!fuente
Un colega tuvo el mismo error y se debió a un pequeño error de configuración en IIS.
Se asignó el grupo de aplicaciones incorrecto para la aplicación web.
De hecho, utilizamos un grupo de aplicaciones personalizado con una identidad específica para satisfacer nuestras necesidades.
En su IIS Manager local -> Sitios -> Sitio web predeterminado -> Nombre de nuestra 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.
fuente
Agregué
<identity impersonate="true" />
a mi web.config y funcionó bien.fuente
Para mí, el problema se resolvió cuando reemplacé la cuenta incorporada predeterminada 'ApplicationPoolIdentity' con una cuenta de red a la que se le 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
fuente
Para mí, el problema con 'DOMAIN \ MACHINENAME $' se solucionó configurando
DefaultApplicationPool
Identity enNetworkService
.fuente
Recibíamos 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 de SQL Server.
En SQL Server 2012, los servicios de SQL Server y Analysis están configurados para ejecutarse como usuarios diferentes de forma predeterminada. Si ha optado por los valores predeterminados, asegúrese siempre de que el usuario AS tenga acceso a su fuente de datos.
fuente
Comprueba si tienes
en cadena de conexión. Intente eliminarlo, lo que resolverá su problema.
fuente
También tuve este error con un usuario autenticado de SQL Server
Probé algunas de las correcciones, pero no funcionaron.
La solución en mi caso fue configurar su "Modo de autenticación de servidor" para permitir la autenticación de SQL Server, en Management Studio: Propiedades / Seguridad.
fuente
El único punto que todo el mundo parece haber pasado por alto es que es posible que desee seguridad integrada = verdadero. Es posible que el sitio se ejecute en una cuenta de grupo. Todo está bien y todavía es posible acceder al servidor SQL con la credencial de usuario original y no con la del grupo. Se llama delegación restringida. Si lo habilita y configura un SPN, las ventanas traducirán 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 servidor SQL que atiende las solicitudes SQL en el servidor web. Configurar todo esto es demasiado para intentar describirlo aquí con precisión. Me tomó bastante tiempo resolverlo yo mismo.
fuente
Pasé algunas horas tratando de solucionar el problema y finalmente lo entendí: el navegador de SQL Server estaba "detenido". La solución es cambiarlo al modo "Automático":
cita de aquí
fuente
Tuve el mismo problema antes, la eliminación
Persist Security Info=True
de la cadena de conexión funcionó para mí.fuente
Me encontré con este problema cuando un cliente cambió el nombre de SQL Server. El servicio de informes SQL se configuró para conectarse al nombre del servidor anterior, para el cual también habían creado un alias para que se redirigiera a la IP del nuevo nombre del servidor.
Todas sus antiguas aplicaciones IIS estaban funcionando, redirigiendo al nuevo nombre del servidor a través del alias. Por una corazonada, verifiqué si estaban ejecutando SSRS. Intentar conectarse al sitio SSRS produjo el error:
"El servicio no está disponible. Comuníquese con el administrador del sistema para resolver el problema. Administradores del sistema: el servidor de informes no puede conectarse a su base de datos. Asegúrese de que la base de datos esté en ejecución y accesible. También puede consultar el registro de seguimiento del servidor de informes para obtener más detalles . "
Se estaba ejecutando en el servidor, pero no se podía conectar porque estaba usando el alias del nombre del servidor anterior. La reconfiguración de SSRS para usar el nuevo nombre del servidor en lugar del antiguo / alias lo solucionó.
fuente
fuente
Recibí este error al intentar probar una solución usando lo siguiente
La forma en que resolví fue: tuve que abrir Visual Studio y ejecutarlo con otra cuenta, porque la cuenta que estaba usando para abrir no era mi cuenta de administrador.
Entonces, si su problema es similar al mío: fije el VS a la barra de tareas, luego use Mayús y haga clic con el botón derecho para abrir el menú para que pueda abrir VS como otro usuario.
fuente
Aprecio que hay algunas buenas respuestas aquí, pero como acabo de perder tiempo resolviendo esto, espero que esto pueda ayudar a alguien.
En mi caso, todo había estado funcionando bien, luego se detuvo sin razón aparente con el error indicado en la pregunta.
IIS se estaba ejecutando como servicio de red y el servicio de red se había configurado anteriormente en SQL Server (consulte otras respuestas a esta publicación). Los roles de servidor y las asignaciones de usuarios parecían correctos.
El problema era; sin ninguna razón aparente; El servicio de red había cambiado a "Denegar" los derechos de inicio de sesión en la base de datos.
Arreglar:
Permission to Connect To Database Engine
'Otorgar'.fuente