Não é possível abrir o database “teste” solicitado pelo login. O login falhou. Login falhou para o usuário ‘xyz \ ASPNET’

Eu criei um serviço da web que está salvando alguns dados em db. Mas estou recebendo este erro:

Não é possível abrir o database “teste” solicitado pelo login. O login falhou. Logon falhou para o usuário ‘xyz \ ASPNET’.

Minha string de conexão é

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

Bem, o erro é bem claro, não? Você está tentando se conectar ao seu SQL Server com o usuário “xyz / ASPNET” – essa é a conta em que seu aplicativo ASP.NET está sendo executado.

Essa conta não tem permissão para se conectar ao SQL Server – crie um logon no SQL Server para essa conta ou especifique outra conta válida do SQL Server em sua cadeia de conexão.

Você pode nos mostrar sua seqüência de conexão (atualizando sua pergunta original)?

ATUALIZAÇÃO: Ok, você está usando autenticação integrada do Windows -> você precisa criar um login do SQL Server para “xyz \ ASPNET” no seu SQL Server – ou alterar sua string de conexão para algo como:

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

Se você tiver um usuário “xyz” com uma senha de “top $ secret” em seu database.

  • Ou: “xyz \ ASPNET” não é um login (em sys.server_principals)
  • Ou: “xyz \ ASPNET” está configurado, mas não mapeado para um usuário no teste de database (sys.database_principals)

Eu iria para a segunda opção: a mensagem de erro implica que o database padrão não está lá ou não tem direitos, em vez de não configurar como um login.

Para testar se está configurado como um login

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

Se NULL

 CREATE LOGIN [xyz\ASPNET] FROM WINDOWS 

Se não for NULL

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

Se NULL

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

A melhor solução para o problema de login é criar um usuário de login no sqlServer. Aqui estão as etapas para criar um logon do SQL Server que usa a Autenticação do Windows (SQL Server Management Studio):

  1. No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta da instância do servidor na qual criar o novo logon.
  2. Clique com o botão direito do mouse na pasta Segurança, aponte para Novo e clique em Logon.
  3. Na página Geral, insira o nome de um usuário do Windows na checkbox Nome de login.
  4. Selecione Autenticação do Windows.
  5. Clique OK.

Por exemplo, se o nome do usuário for xyz\ASPNET , insira esse nome na checkbox Nome do login.

Além disso, você precisa alterar o mapeamento do usuário para permitir o access ao database que deseja acessar.

Na maioria das vezes, não é um problema de login, mas um problema com a criação do próprio database. Portanto, se houver um erro ao criar seu database, ele não será criado em primeiro lugar. Nesse caso, se você tentou efetuar login, independentemente do usuário, o login falharia. Isso geralmente acontece devido à má interpretação lógica do contexto do database.

Visite o site em um navegador e leia REALMENTE esses logs de erros, isso pode ajudá-lo a identificar o problema com seu código (geralmente problemas de lógica conflitantes com o modelo).

No meu caso, o código compilado bem, mesmo problema de login, enquanto eu ainda estava baixando o estúdio de gerenciamento, eu passei pelo log de erro, corrigido minhas restrições de contexto de db e site começou a correr bem …. enquanto estúdio de gerenciamento ainda está baixando

Eu tive esse problema e o que resolveu para mim foi:

  • Vá para os pools de aplicativos no IIS
  • Clique com o botão direito no meu pool de aplicativos do projeto
  • Na seção Modelo de Processo, abra Identidade
  • Escolha a opção de conta personalizada
  • Digite seu nome de usuário e senha do PC.

Eu usei a autenticação do Windows para se conectar ao arquivo .mdf do database local e meu servidor local foi o sql server 2014. Meu problema foi resolvido usando essa string de conexão:

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

O problema

O erro se apresenta como uma mensagem semelhante a esta:

Não é possível abrir o database “NOME DO BANCO DE DADOS” solicitado pelo login. O login falhou. O login falhou para o usuário XYZ.

  • O erro geralmente não pode ser corrigido por um simples Visual Studio ou reboot de computador completo.
  • O erro também pode ser encontrado como um arquivo de database aparentemente bloqueado.

O conserto

A solução é colocada nas etapas a seguir. Você não perderá nenhum dado em seu database e não deverá deletar seu arquivo de database!

Pré-requisito: você deve ter instalado o SQL Server Management Studio (completo ou expresso)

  1. Abra o SQL Server Management Studio
  2. Na janela “Conectar ao Servidor” (File-> Connect object explorer), digite o seguinte:
    • Tipo de servidor: mecanismo de database
    • Nome do servidor: (localdb) \ v11.0
    • Autenticação: [Tudo o que você usou quando criou seu database local. Provavelmente Autenticação do Windows).
  3. Clique em “Conectar”
  4. Expanda a pasta “Databases” no Object Explorer (View-> Object Explorer, F8)
  5. Encontre seu database. Deve ser nomeado como o caminho completo para o seu arquivo de database (.mdf)
    • Você deve ver que diz “(Pending Recovery)” no final do nome do database ou quando você tenta expandir o database que não será capaz e pode ou não lhe dar uma mensagem de erro.
    • Essa é a questão! Seu database caiu essencialmente ..
  6. Clique com o botão direito do mouse no database e selecione “Tasks -> Detach …”.
  7. Na janela de desanexação, selecione seu database na lista e verifique a coluna que diz “Soltar conexões”
  8. Clique OK.
  9. Você deve ver o database desaparecer da lista de bancos de dados. Seu problema deve agora ser corrigido. Vá e execute seu aplicativo que usa seu localdb.
  10. Depois de executar seu aplicativo, seu database irá reaparecer na lista de bancos de dados – isso está correto. Não deve mais dizer “Recuperação pendente”, pois deve estar funcionando corretamente.

A fonte da solução: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

A melhor opção seria usar a autenticação integrada do Windows, pois é mais segura do que a autenticação sql. Crie um novo usuário do windows no sql server com as permissions necessárias e altere o usuário do IIS nas configurações de segurança do pool de aplicativos.

Eu não vi isso mencionado nas edições anteriores, então deixe-me jogar fora outra possibilidade. Pode ser que o IFItest não seja acessível ou simplesmente não exista. Por exemplo, se alguém tiver várias configurações, cada uma com seu próprio database, pode ser que o nome do database não tenha sido alterado para o correto para a configuração atual.

Para mim, o database não foi criado e o código EF primeiro deveria criá-lo, mas sempre terminar com esse erro. A mesma cadeia de conexão estava funcionando no projeto da web padrão do núcleo da aspnet. A solução foi adicionar

 _dbContext.Database.EnsureCreated() 

antes do primeiro contato do database (antes da semeadura do database).

Descobri que eu também tinha que definir a opção UserMapping ao criar um novo login e isso resolveu o problema para mim. Espero que ajude alguém que também se viu preso aqui!

Edit: Definir o login como db proprietário resolveu o próximo problema, também

Tentei atualizar o usuário e funcionou. Veja o comando abaixo.

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

Apenas substitua o user('ftool') acordo.

Algumas vezes esse problema pode aparecer se você abrir esse database em outro servidor sql (como exemplo, você inicia o sql managment studio (SMS) e adiciona esse database), e esqueça de parar este servidor. Como resultado – você app tenta se conectar com o usuário já conectado neste database em outro servidor. Para corrigir isso, tente parar este servidor pelo Config. servidor sql dispatcher.

Minhas desculpas sobre o inglês ruim. Atenciosamente, Ignat.

Isso funciona para mim.

  1. Vá para SQL Server >> Segurança >> Logins e clique com o botão direito do mouse em NT AUTHORITY \ NETWORK SERVICE e selecione Propriedades.
  2. Na canvas recém-aberta de Propriedades de Login, vá para a guia “Mapeamento de Usuários”.
  3. Em seguida, na guia “User Mapping”, selecione o database desejado – especialmente o database para o qual essa mensagem de erro é exibida.
  4. Clique OK.

Leia 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- usuário-nt-authoritynetwork-service /

No meu caso, o aplicativo asp.net geralmente pode se conectar ao database sem problemas. Eu notei essa mensagem em logs. Eu ligo os logs do servidor SQL e descubro esta mensagem:

 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. 

Portanto, parece que o servidor estava reiniciando e que o servidor SQL estava sendo encerrado um pouco antes do aplicativo ASP.NET e o database não estava disponível por alguns segundos antes da reboot do servidor.

Mesmo que você tenha definido o login como proprietário do database e definido o mapeamento de usuário para o database que usará o login, verifique se o usuário do database real (não apenas o login) tem o papel de ‘proprietário’.

Isso também acontece quando você digita o nome errado do DB

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

Às vezes, é apenas um erro estúpido. Eu levo cerca de mais de 1 hora para descobrir isso 🙁 porque eu apenas tento muita coisa difícil primeiro

NB: Se estiver usando um serviço do Windows para hospedar o serviço da web.

Você precisa garantir que seu serviço da web esteja usando a conta de logon correta para se conectar ao SQL Server.

  • Serviços abertos (suponho que o serviço do windows tenha sido instalado)
  • Clique com o botão direito do mouse nas propriedades service e goto.
  • Clique na aba “Log On”
  • Clique no botão de opção “Esta conta”
  • Clique em “Browse”
  • Digite o nome do usuário do PC no campo de texto e clique no botão “Verificar nome” à direita.
  • Clique no texto no campo de texto, pressione o botão “OK”
  • insira a senha de login e aplique