Não é possível abrir o “teste” do banco de dados solicitado pelo login. O login falhou. Falha no login do usuário 'xyz \ ASPNET'


97

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

Não é possível abrir o banco de dados "teste" solicitado pelo login. O login falhou. Falha no login do usuário 'xyz \ ASPNET'.

Minha string de conexão é

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

Precisamos de muito mais informações antes de ajudar a diagnosticar isso.
sblom

Eu tive esse problema e fechei o Visual Studio e o abri novamente e ele começou a funcionar ..
trees_are_great

Respostas:


47

Bem, o erro é bastante claro, não? Você está tentando se conectar ao SQL Server com o usuário "xyz / ASPNET" - essa é a conta na qual seu aplicativo ASP.NET está sendo executado.

Esta 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 string de conexão (atualizando sua pergunta original)?

ATUALIZAÇÃO: Ok, você está usando a autenticação integrada do Windows -> você precisa criar um login do SQL Server para "xyz \ ASPNET" no seu SQL Server - ou alterar a 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 "top $ secret" em seu banco de dados.


11
Não "não tem permissão para se conectar ao SQL Server", mas "não tem permissão para usar o banco de dados" teste "".
GUERRA

@wRAR: true - mas eu acho que a chance de o login do usuário existir no servidor, mas não estar habilitado neste banco de dados específico, é provavelmente pequena (pelo menos eu acho)
marc_s

Consulte também "Banco de dados = IFItest" vs "teste", embora isso possa ser um erro de impressão.
wRAR

2
Um ponto que você nunca tocou é que o nome do banco de dados também pode estar errado. Eu estava recebendo uma mensagem idêntica de exceção de aparência do meu Azure SQL Server e descobri que dei um nome errado para meu banco de dados em uma das cadeias de conexão no código C # em meu projeto ASP.NET.
Ron16

Ron, esse era o meu problema. Eu tinha até verificado a ortografia, mas não consegui.
Darrell Lloyd Harvey

32
  • 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 banco de dados (sys.database_principals)

Eu escolheria a segunda opção: a mensagem de erro indica que o banco de dados padrão não existe ou não tem direitos nele, em vez de não estar configurado 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]

1
Isso é ótimo !, um fluxo de trabalho simples para detectar e resolver o problema.
Mazen el Senih

12

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

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

Funcionou para mim também!
Mazen el Senih

8

A melhor solução para o problema de login é criar um usuário de login em sqlServer. Aqui estão as etapas para criar um login 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 deseja criar o novo logon.
  2. Clique com o botão direito na pasta Segurança, aponte para Novo e clique em Login.
  3. Na página Geral, digite o nome de um usuário do Windows na caixa Nome de login.
  4. Selecione Autenticação do Windows.
  5. Clique OK.

Por exemplo, se o nome do usuário for xyz\ASPNET, digite esse nome na caixa Nome de login.

Além disso, você precisa alterar o mapeamento do usuário para permitir o acesso ao banco de dados que deseja acessar.


8

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

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

No meu caso, o código compilou bem, o mesmo problema de login, enquanto eu ainda estava baixando o management studio, passei pelo log de erros, consertei minhas restrições de contexto de banco de dados e o site começou a funcionar bem ... enquanto o management studio ainda está baixando


6

Para mim, o banco de dados não foi criado e o código EF primeiro deveria ter criado, mas sempre endet neste erro. A mesma string de conexão estava funcionando no projeto da web padrão do núcleo aspnet. A solução foi adicionar

_dbContext.Database.EnsureCreated()

antes do primeiro contato com o banco de dados (antes da propagação do banco de dados).


4

O problema

O erro se apresenta como uma mensagem semelhante a esta:

Não é possível abrir o banco de dados "DATABASE NAME" solicitado pelo login. O login falhou. Falha de login para o usuário XYZ.

  • O erro geralmente não pode ser retificado por um simples Visual Studio ou reinicialização de todo o computador.
  • O erro também pode ser encontrado como um arquivo de banco de dados aparentemente bloqueado.

O conserto

A solução é definida nas etapas a seguir. Você não perderá nenhum dado em seu banco de dados e não deve deletar seu arquivo de banco de dados!

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" (Arquivo-> Conectar explorador de objetos), digite o seguinte:
    • Tipo de servidor: Database Engine
    • Nome do servidor: (localdb) \ v11.0
    • Autenticação: [tudo o que você usou quando criou seu banco de dados local. Provavelmente, autenticação do Windows).
  3. Clique em "Conectar"
  4. Expanda a pasta "Bancos de dados" no Object Explorer (Exibir-> Object Explorer, F8)
  5. Encontre seu banco de dados. Deve ser nomeado como o caminho completo para seu arquivo de banco de dados (.mdf)
    • Você deve ver que diz "(Pending Recovery)" no final do nome do banco de dados ou quando você tentar expandir o banco de dados, ele não será capaz e pode ou não apresentar uma mensagem de erro.
    • Este é o problema! Seu banco de dados travou essencialmente ..
  6. Clique com o botão direito no banco de dados e selecione "Tarefas -> Desanexar ...".
  7. Na janela de desanexação, selecione seu banco de dados na lista e verifique a coluna que diz "Drop Connections"
  8. Clique OK.
  9. Você deve ver o banco de dados desaparecer da lista de bancos de dados. Seu problema agora deve ser corrigido. Vá e execute seu aplicativo que usa seu localdb.
  10. Depois de executar seu aplicativo, seu banco de dados irá reaparecer na lista de bancos de dados - correto. Ele não deve mais dizer "Pendente de recuperação", pois deve estar funcionando corretamente.

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


O problema é que nem consigo encontrar esse banco de dados.
Shimmy Weitzhandler

3

Também acontece quando você digita o nome errado do banco de dados

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

Às vezes, é apenas um erro estúpido. Levo mais de 1 hora para descobrir isso :( porque eu apenas tento muitas coisas difíceis primeiro


2

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';

Basta substituir de user('ftool')acordo.


2

Isso funciona para mim.

  1. Vá para SQL Server >> Segurança >> Logins e clique com o botão direito em NT AUTHORITY \ NETWORK SERVICE e selecione Propriedades
  2. Na tela recém-aberta de Propriedades de Login, vá para a guia “Mapeamento de Usuário”.
  3. Em seguida, na guia “Mapeamento de usuário”, selecione o banco de dados desejado - especialmente o banco de dados para o qual esta 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- user-nt-authoritynetwork-service /


obrigado, usando "NT AUTHORITY \ SYSTEM" resolveu meu problema.
Farzad Karimi

2

Usei a autenticação do Windows para me conectar ao arquivo .mdf do banco de dados local e meu servidor local era o sql server 2014. Meu problema foi resolvido usando esta string de conexão:

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

Tive que remover esta parte "User Instance = True" para fazer meu banco de dados local funcionar
Anônimo

2

No meu caso, é um problema diferente. O banco de dados passou para o modo de usuário único e uma segunda conexão com o banco de dados estava mostrando essa exceção. Para resolver esse problema, siga as etapas abaixo.

  1. Certifique-se de que o explorador de objetos esteja apontado para um banco de dados do sistema como o mestre.
  2. Execute exec sp_who2ae encontre todas as conexões com o banco de dados 'my_db'. Elimine todas as conexões fazendo KILL { session id }onde id da sessão é o SPID listado por sp_who2.
USE MASTER;
EXEC sp_who2
  1. Alterar o banco de dados
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

Não vi isso mencionado nas edições anteriores, então deixe-me jogar fora outra possibilidade. Pode ser que IFItestnão seja alcançável ou simplesmente não exista. Por exemplo, se houver várias configurações, cada uma com seu próprio banco de dados, pode ser que o nome do banco de dados não tenha sido alterado para o correto para a configuração atual.


1

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

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

  • Serviços abertos (presumo que o serviço do Windows foi instalado)
  • Clique com o botão direito no serviço e vá para as propriedades.
  • Clique na guia "Log On"
  • Clique no botão de opção "Esta conta"
  • Clique em "Navegar"
  • Digite o nome de 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"
  • digite a senha de login e aplique

1

Inspirado pela resposta de cyptus que usei

_dbContext.Database.CreateIfNotExists();

no EF6 antes do primeiro contato com o banco de dados (antes da propagação do banco de dados).


1

Se você não criou o banco de dados em seu servidor, obterá o mesmo erro de login. Certifique-se de que o banco de dados exista antes de fazer o login.


1

Eu encontrei esse problema ao tentar gravar no banco de dados padrão fornecido no modelo mvc asp.net. Isso se deve ao fato de o banco de dados ainda não ter sido criado.

Para criar o banco de dados e verificar se ele está acessível, siga estas etapas:

  1. Abra o console do gerenciador de pacotes no Visual Studio
  2. Execute o comando "update-database"

Isso criará o banco de dados e executará todas as migrações necessárias nele.


0

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 servidor sql com as permissões necessárias e altere o usuário do IIS nas configurações de segurança do pool de aplicativos.


0

Descobri que também precisava definir a opção UserMapping ao criar um novo login e isso resolveu o problema para mim. Espero que ajude quem também ficou preso aqui!

Edit: Definir o login como db owner também resolveu o próximo problema


0

Algumas vezes esse problema pode aparecer se você abrir este banco de dados em outro servidor sql (por exemplo, você iniciar o sql managment studio (SMS) e adicionar este banco de dados) e esquecer de parar este servidor. Como resultado - seu aplicativo tenta se conectar com o usuário já conectado neste db em outro servidor. Para consertar isso, tente parar este servidor pelo Config. servidor sql do dispatcher.

Minhas desculpas pelo inglês ruim. Atenciosamente, Ignat.


0

No meu caso, o aplicativo asp.net geralmente pode se conectar ao banco de dados sem problemas. Percebi essa mensagem nos logs. Eu ligo os logs do servidor SQL e encontro esta mensagem:

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.

Portanto, parece que o servidor estava reiniciando e que o servidor SQL havia sido desligado um pouco antes do aplicativo ASP.NET e o banco de dados não estava disponível por alguns segundos antes da reinicialização do servidor.


0

Mesmo se você definir o login como proprietário do banco de dados e definir o mapeamento do usuário para o banco de dados que usará o logon, verifique se o usuário do banco de dados real (não apenas o logon) tem a função de 'proprietário'.


0

No meu caso, estava executando um serviço do Windows com a identidade "Sistema". O erro foi:

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

O problema é que o erro é muito enganoso. Mesmo depois de adicionar o login 'MYDOMAINNAME \ HOSTNAME $' ao banco de dados, conceder a esse login o acesso sysadmin e adicionar um usuário para esse login ao meu banco de dados de destino e fazer esse usuário dbowner, ainda estava recebendo o mesmo erro. Aparentemente, eu precisava fazer o mesmo para o login 'NT AUTHORITY \ SYSTEM'. Depois de fazer isso, consegui fazer o login sem problemas. Não sei por que a mensagem de erro reclama sobre 'MYDOMAINNAME \ HOSTNAME $'. Excluí aquele login e o usuário correspondente e tudo ainda funciona.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.