No se puede abrir la “prueba” de la base de datos solicitada por el inicio de sesión. El inicio de sesión falló. Error de inicio de sesión para el usuario ‘xyz \ ASPNET’

Creé un servicio web que está guardando algunos datos en db. Pero estoy obteniendo este error:

No se puede abrir la “prueba” de la base de datos solicitada por el inicio de sesión. El inicio de sesión falló. Error de inicio de sesión para el usuario ‘xyz \ ASPNET’.

Mi cadena de conexión es

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True 

Bueno, el error es bastante claro, ¿no? Está intentando conectarse a su SQL Server con el usuario “xyz / ASPNET”, esa es la cuenta con la que se ejecuta su aplicación ASP.NET.

No se permite que esta cuenta se conecte a SQL Server: cree un inicio de sesión en SQL Server para esa cuenta, o luego especifique otra cuenta válida de SQL Server en su cadena de conexión.

¿Puede mostrarnos su cadena de conexión (actualizando su pregunta original)?

ACTUALIZACIÓN: Ok, está usando autenticación integrada de Windows -> necesita crear un inicio de sesión de SQL Server para “xyz \ ASPNET” en su servidor SQL – o cambie su cadena de conexión a algo como:

 connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret" 

Si tiene un usuario “xyz” con una contraseña de “top $ secret” en su base de datos.

  • O bien: “xyz \ ASPNET” no es un inicio de sesión (en sys.server_principals)
  • O bien: “xyz \ ASPNET” está configurado pero no asignado a un usuario en la prueba de la base de datos (sys.database_principals)

Optaría por la segunda opción: el mensaje de error implica que la base de datos predeterminada no está allí o no tiene derechos, en lugar de no configurarse como inicio de sesión.

Para probar si está configurado como un inicio de sesión

 SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID) 

Si es NULL

 CREATE LOGIN [xyz\ASPNET] FROM WINDOWS 

Si no es NULL

 USE test GO SELECT USER_ID('xyz\ASPNET') 

Si es NULL

 USE test GO CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET] 

La mejor solución para el problema de inicio de sesión es crear un usuario de inicio de sesión en sqlServer. Estos son los pasos para crear un inicio de sesión de SQL Server que usa la Autenticación de Windows (SQL Server Management Studio):

  1. En SQL Server Management Studio, abra el Explorador de objetos y expanda la carpeta de la instancia del servidor en la que se creará el nuevo inicio de sesión.
  2. Haga clic con el botón derecho en la carpeta Seguridad, seleccione Nuevo y luego haga clic en Iniciar sesión.
  3. En la página General, ingrese el nombre de un usuario de Windows en el cuadro Nombre de inicio de sesión.
  4. Seleccione Autenticación de Windows.
  5. Haga clic en Aceptar.

Por ejemplo, si el nombre de usuario es xyz\ASPNET , ingrese este nombre en el cuadro Nombre de inicio de sesión.

También necesita cambiar la asignación de usuario para permitir el acceso a la base de datos a la que desea acceder.

La mayoría de las veces, no es un problema de inicio de sesión, sino un problema con la creación de la base de datos. Entonces, si hay un error al crear su base de datos, no se creará en primer lugar. En ese caso, si intentas iniciar sesión, independientemente del usuario, el inicio de sesión fallará. Esto generalmente ocurre debido a la mala interpretación lógica del contexto db.

Visite el sitio en un navegador y REALMENTE lea esos registros de errores, esto puede ayudarlo a detectar el problema con su código (generalmente problemas lógicos contradictorios con el modelo).

En mi caso, el código compiló bien, el mismo problema de inicio de sesión, mientras aún estaba descargando Management Studio, revisé el registro de errores, solucioné las restricciones de contexto de db y el sitio comenzó a funcionar bien … Mientras tanto, el estudio de administración todavía está descargando

Tuve este problema y lo que me solucionó fue:

  • Vaya a los grupos de aplicaciones en el IIS
  • Haga clic derecho en mi grupo de aplicaciones de proyecto
  • En la sección Modelo de proceso, abra Identidad
  • Elija la opción de cuenta personalizada
  • Ingrese el nombre de usuario y la contraseña de su PC.

Utilicé la autenticación de Windows para conectarme al archivo .mdf de la base de datos local y mi servidor local fue el servidor sql 2014. Mi problema se resolvió utilizando esta cadena de conexión:

 string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30"; 

La cuestión

El error se presenta como un mensaje similar a esto:

No se puede abrir la base de datos “DATABASE NAME” solicitada por el inicio de sesión. El inicio de sesión falló. Error de inicio de sesión para el usuario XYZ.

  • Por lo general, el error no se puede corregir con un simple reinicio de Visual Studio o de computadora completa.
  • El error también se puede encontrar como un archivo de base de datos aparentemente bloqueado.

La solución

La solución se establece en los siguientes pasos. ¡No perderá ningún dato en su base de datos y no deberá eliminar su archivo de base de datos!

Requisito previo: debe haber instalado SQL Server Management Studio (completo o expreso)

  1. Abrir SQL Server Management Studio
  2. En la ventana “Conectar al servidor” (Archivo-> Conectar explorador de objetos), ingrese lo siguiente:
    • Tipo de servidor: Motor de base de datos
    • Nombre del servidor: (localdb) \ v11.0
    • Autenticación: [Lo que utilizó cuando creó su db local. Probablemente autenticación de Windows).
  3. Haga clic en “Conectar”
  4. Expande la carpeta “Bases de datos” en el Explorador de objetos (Ver -> Explorador de objetos, F8)
  5. Encuentra tu base de datos Debe nombrarse como la ruta completa a su archivo de base de datos (.mdf)
    • Debería ver que dice “(Pendiente de recuperación)” al final del nombre de la base de datos o cuando intenta expandir la base de datos no podrá y puede o no darle un mensaje de error.
    • Este es el problema! Su base de datos se ha bloqueado esencialmente …
  6. Haga clic derecho en la base de datos y luego seleccione “Tareas -> Separar …”.
  7. En la ventana de separación, seleccione su base de datos en la lista y marque la columna que dice “Eliminar conexiones”
  8. Haga clic en Aceptar.
  9. Debería ver desaparecer la base de datos de la lista de bases de datos. Su problema ahora debe ser reparado. Ve y ejecuta tu aplicación que usa tu localdb.
  10. Después de ejecutar su aplicación, su base de datos volverá a aparecer en la lista de bases de datos, esto es correcto. Ya no debería decir “recuperación pendiente”, ya que debería funcionar correctamente.

El origen de la solución: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

La mejor opción sería usar la autenticación integrada de Windows, ya que es más segura que la autenticación SQL. Cree un nuevo usuario de Windows en el servidor sql con los permisos necesarios y cambie el usuario de IIS en la configuración de seguridad del grupo de aplicaciones.

No he visto esto mencionado en los números anteriores, así que déjenme descartar otra posibilidad. Podría ser que IFItest no es alcanzable o simplemente no existe. Por ejemplo, si uno tiene varias configuraciones, cada una con su propia base de datos, podría ser que el nombre de la base de datos no se haya cambiado a la correcta para la configuración actual.

Para mí, la base de datos no se creó y el código EF primero debería haberlo creado, pero siempre se enderezó en este error. La misma cadena de conexión estaba trabajando en el proyecto web predeterminado aspnet core. La solución fue agregar

 _dbContext.Database.EnsureCreated() 

antes del primer contacto de la base de datos (antes de la creación de DB).

Descubrí que también tenía que configurar la opción UserMapping al crear un nuevo inicio de sesión y esto me solucionó el problema. Espero que ayude a cualquiera que también se encuentre atrapado aquí!

Editar: Configurar el inicio de sesión como propietario de db resolvió el siguiente problema, también

Traté de actualizar al usuario, y funcionó. Vea el comando a continuación.

 USE ComparisonData// databaseName EXEC sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool'; 

Simplemente reemplace el user('ftool') consecuencia.

Algunas veces este problema puede aparecer si abre este archivo db en otro servidor sql (por ejemplo, inicia el estudio de gestión sql (SMS) y agrega este db), y olvida detener este servidor. Como resultado, su aplicación intenta conectarse con el usuario que ya está conectado en este db en otro servidor. Para solucionarlo, intente detener este servidor mediante Config. servidor sql del despachador

Mis disculpas por el mal inglés. Saludos cordiales, Ignat.

Esto funciona para mí

  1. Vaya a SQL Server >> Seguridad >> inicios de sesión y haga clic derecho en NT AUTHORITY \ NETWORK SERVICE y seleccione Propiedades
  2. En la pantalla recién abierta de Propiedades de inicio de sesión, vaya a la pestaña “Asignación de usuario”.
  3. 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.
  4. Haga clic en Aceptar.

Lee este blog

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requestted-by-the-login-the-login-failed-login-failed-for- user-nt-authoritynetwork-service /

En mi caso, la aplicación asp.net generalmente se puede conectar a la base de datos sin ningún problema. Noté tal mensaje en los registros. Enciendo los registros del servidor SQL y descubro este mensaje:

 2016-10-28 10:27:10.86 Logon Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: ] 2016-10-28 10:27:13.22 Server SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required. 

Parece que el servidor se estaba reiniciando y que el servidor SQL se había apagado un poco antes que la aplicación ASP.NET y que la base de datos no estaba disponible durante unos segundos antes de reiniciar el servidor.

Incluso si ha configurado el inicio de sesión como propietario del DB y ha establecido la asignación del usuario para la base de datos que usará el inicio de sesión, verifique que el usuario real de la base de datos (no solo el inicio de sesión) tenga el rol de ‘propietario’.

También ocurre cuando escribe el nombre incorrecto de DB

 ex : xxx-db-dev to xxx-dev-db 

En algún momento, es solo un error estúpido. Tomo más de 1 hora para descubrir esto 🙁 porque solo trato de hacer cosas difíciles primero

NB: si usa un servicio de Windows para alojar el servicio web.

Debe asegurarse de que su servicio web esté utilizando la cuenta de inicio de sesión correcta para conectarse a SQL Server.

  • Servicios abiertos (supongo que el servicio de Windows ha sido instalado)
  • Haga clic derecho en el servicio y pase a las propiedades.
  • Haga clic en la pestaña “Iniciar sesión”
  • Haga clic en el botón de opción “Esta cuenta”
  • Haga clic en “Buscar”
  • Ingrese el nombre de usuario de la PC en el campo de texto y haga clic en el botón “Comprobar nombre” a la derecha.
  • Haga clic en el texto en el campo de texto, presione el botón “Aceptar”
  • ingrese la contraseña de inicio de sesión y aplique