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'

99

He creado un servicio web que está guardando algunos datos en db. Pero recibo 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
coure2011
fuente
Necesitamos mucha más información antes de poder ayudar a diagnosticar esto.
sblom
Tuve este problema y cerré Visual Studio, lo abrí de nuevo y comenzó a funcionar.
trees_are_great

Respuestas:

47

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

Esta cuenta no puede conectarse 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ás usando la autenticación integrada de Windows -> necesitas crear un inicio de sesión de SQL Server para "xyz \ ASPNET" en tu SQL Server - o cambiar tu 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.

marc_s
fuente
11
No "no se le permite conectarse a SQL Server", pero "no se le permite usar la base de datos" prueba "".
wRAR
@wRAR: cierto, pero supongo que la posibilidad de que el inicio de sesión del usuario exista en el servidor, pero no esté habilitado en esta base de datos en particular, sea probablemente escasa (al menos eso creo)
marc_s
Vea también "Database = IFItest" vs "test", aunque puede ser un error de imprenta.
wRAR
2
Un punto que nunca mencionó es que el nombre de la base de datos también podría estar equivocado. Recibí un mensaje de excepción de aspecto ídem desde mi servidor SQL de Azure, y resultó que le había dado un nombre incorrecto a mi base de datos en una de las cadenas de conexión en el código C # en mi proyecto ASP.NET.
Ron16
Ron, ese era mi problema. Incluso había revisado dos veces la ortografía, pero la perdí incluso entonces.
Darrell Lloyd Harvey
32
  • O bien: "xyz \ ASPNET" no es un inicio de sesión (en sys.server_principals)
  • O: "xyz \ ASPNET" está configurado pero no asignado a un usuario en la prueba de la base de datos (sys.database_principals)

Yo 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 ella, en lugar de no estar configurada como inicio de sesión.

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

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

Si es NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Si no es NULO

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

Si es NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
gbn
fuente
1
¡Esto es simplemente genial !, un flujo de trabajo simple para detectar y resolver el problema.
Mazen el Senih
13

Tuve este problema y lo que me resolvió fue:

  • Vaya a los grupos de aplicaciones en IIS
  • Haga clic derecho en el grupo de aplicaciones de mi 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.
ParPar
fuente
8

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

Además, debe cambiar la asignación de usuario para permitir el acceso a la base de datos a la que desea acceder.

Rajeev
fuente
8

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 cuyo caso, si intentaba iniciar sesión, independientemente del usuario, el inicio de sesión fallaría. Esto suele ocurrir debido a una mala interpretación lógica del contexto de la base de datos.

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 conflictivos con el modelo).

En mi caso, el código se compiló bien, el mismo problema de inicio de sesión, mientras todavía estaba descargando Management Studio, revisé el registro de errores, arreglé las restricciones de contexto de mi base de datos y el sitio comenzó a funcionar bien ... mientras tanto Management Studio todavía se está descargando

Justicia O.
fuente
6

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

_dbContext.Database.EnsureCreated()

antes del primer contacto con la base de datos (antes de la siembra de la base de datos).

cyptus
fuente
4

La cuestión

El error se presenta como un mensaje similar a este:

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 Visual Studio o reiniciando la computadora por completo.
  • El error también se puede encontrar como un archivo de base de datos aparentemente bloqueado.

La solución

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

Requisito previo: debe tener instalado SQL Server Management Studio (Full o Express)

  1. Abrir SQL Server Management Studio
  2. En la ventana "Conectar al servidor" (Archivo-> Conectar explorador de objetos) introduzca lo siguiente:
    • Tipo de servidor: motor de base de datos
    • Nombre del servidor: (localdb) \ v11.0
    • Autenticación: [Lo que haya utilizado cuando creó su base de datos local. Probablemente autenticación de Windows).
  3. Haga clic en "Conectar"
  4. Expanda 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 "(Recuperación pendiente)" al final del nombre de la base de datos o cuando intente expandir la base de datos no podrá hacerlo y puede que le dé un mensaje de error o no.
    • ¡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 desconexión, seleccione su base de datos en la lista y verifique la columna que dice "Desconectar conexiones"
  8. Haga clic en Aceptar.
  9. Debería ver que la base de datos desaparece de la lista de bases de datos. Su problema ahora debería estar solucionado. Vaya y ejecute su aplicación que usa su 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 "Pendiente de recuperación", ya que debería estar funcionando correctamente.

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

Anton Lyhin
fuente
El problema es que ni siquiera puedo encontrar ese DB.
Shimmy Weitzhandler
3

También sucede cuando escribe un nombre incorrecto de DB

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

A veces, es solo un error estúpido. Tardé más de 1 hora en descubrir esto :( porque primero intento muchas cosas difíciles

Lobo gris
fuente
2

Intenté actualizar el 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 reemplácelo en user('ftool')consecuencia.

Shashank
fuente
2

Esto funciona para mí.

  1. Vaya a SQL Server >> Seguridad >> Inicios de sesión y haga clic con el botón 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 usuarios".
  3. 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.
  4. Haga clic en Aceptar.

Lea este blog.

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

Kamran
fuente
gracias, usando "NT AUTHORITY \ SYSTEM" resolvió mi problema.
Farzad Karimi
2

Usé la autenticación de Windows para conectarme al archivo .mdf de la base de datos local y mi servidor local era SQL Server 2014. Mi problema se resolvió usando esta cadena de conexión:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
Ehsan
fuente
Tuve que eliminar esta parte "User Instance = True" para que mi base de datos local funcione
Anónimo
2

En mi caso es un tema diferente. La base de datos se convirtió en modo de usuario único y una segunda conexión a la base de datos mostraba esta excepción. Para resolver este problema, siga los pasos a continuación.

  1. Asegúrese de que el explorador de objetos apunte a una base de datos del sistema como master.
  2. Ejecute exec sp_who2ay busque todas las conexiones a la base de datos 'my_db'. Elimine todas las conexiones haciendo KILL { session id }donde id de sesión es el SPID enumerado por sp_who2.
USE MASTER;
EXEC sp_who2
  1. Alterar la base de datos
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
Krishanth Rajkumar
fuente
1

No he visto esto mencionado en los números anteriores, así que permítanme descartar otra posibilidad. Puede ser que IFItestno sea accesible o simplemente no exista. Por ejemplo, si uno tiene varias configuraciones, cada una con su propia base de datos, es posible que el nombre de la base de datos no se haya cambiado al correcto para la configuración actual.

demongolem
fuente
1

NB: si utiliza 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 se ha instalado el servicio de Windows)
  • Haga clic derecho en el servicio y vaya a propiedades.
  • Haga clic en la pestaña "Iniciar sesión"
  • Haga clic en el botón de opción "Esta cuenta"
  • Haga clic en "Examinar"
  • Introduzca 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
Koki Monoto
fuente
1

Inspirado por la respuesta de Cyptus que usé

_dbContext.Database.CreateIfNotExists();

en EF6 antes del primer contacto con la base de datos (antes de la siembra de la base de datos).

Jesse Hufstetler
fuente
1

Si no ha creado la base de datos en su servidor, obtendrá el mismo error de inicio de sesión. Asegúrese de que la base de datos exista antes de iniciar sesión.

AmirHossein Rezaei
fuente
1

Me encontré con este problema al intentar escribir en la base de datos predeterminada proporcionada en la plantilla asp.net mvc. Esto se debió al hecho de que la base de datos aún no se había creado.

Para crear la base de datos y asegurarse de que sea accesible, siga estos pasos:

  1. Abra la consola del administrador de paquetes en Visual Studio
  2. Ejecute el comando "update-database"

Esto creará la base de datos y ejecutará todas las migraciones necesarias en ella.

GrantByrne
fuente
0

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

Giorgi
fuente
0

Descubrí que también tenía que configurar la opción UserMapping al crear un nuevo inicio de sesión y esto me resolvió el problema. ¡Espero que ayude a todos los que también se encontraron atrapados aquí!

Editar: configurar el inicio de sesión como propietario de la base de datos también resolvió el siguiente problema

DevDave
fuente
0

Algunas veces, este problema puede aparecer si abre esta base de datos en otro servidor SQL (por ejemplo, inicia SQL Management Studio (SMS) y agrega esta base de datos) y se olvida de detener este servidor. Como resultado, su aplicación intenta conectarse con el usuario que ya está conectado en esta base de datos en otro servidor. Para solucionarlo, intente detener este servidor mediante Config. despachador servidor sql.

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

user3041948
fuente
0

En mi caso, la aplicación asp.net normalmente puede conectarse a la base de datos sin ningún problema. Noté ese mensaje en los registros. Me enciendo los registros del servidor SQL y me entero de este mensaje:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
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.

Entonces, parece que el servidor se estaba reiniciando y que el servidor SQL se había estado cerrando un poco antes que la aplicación ASP.NET y la base de datos no estuvo disponible durante unos segundos antes del reinicio del servidor.

Tomas Kubes
fuente
0

Incluso si configuró el inicio de sesión como propietario de la base de datos y estableció la asignación de usuarios 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'.

Chris Halcrow
fuente
0

En mi caso, estaba ejecutando un servicio de Windows con la identidad del "Sistema". El error fue:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

El problema es que el error es muy engañoso. Incluso después de que agregué el inicio de sesión 'MYDOMAINNAME \ HOSTNAME $' a la base de datos, y le otorgué acceso de administrador del sistema de inicio de sesión y agregué un usuario para ese inicio de sesión en mi base de datos de destino, e hice que ese usuario dbowner, todavía recibía el mismo error. Aparentemente, necesitaba hacer lo mismo para el inicio de sesión de 'NT AUTHORITY \ SYSTEM'. Después de hacer eso, pude iniciar sesión sin problemas. No sé por qué el mensaje de error indica 'MYDOMAINNAME \ HOSTNAME $'. Eliminé ese inicio de sesión y el usuario correspondiente y todo sigue funcionando.

Greg Z.
fuente