Mensagem que o SQL Server Log File Viewer mostra:
Login failed for user [User]
Error: 18456, Severity: 14, State 38
O que realmente significa:
Failed to open the explicitly specified database
Minha pergunta:
Existe uma lista em algum lugar de todas as variações dos erros 18456 (Falha no login), para cada combinação de gravidade e estado, com o texto de descrição útil?
Eu tive um Google, mas não consigo encontrar nada além de combinações específicas.
Códigos de Estado e seu significado.
Informações mais detalhadas estão disponíveis no blog de Aaron Bertrand .
Para encontrar o código de status, você precisa inspecionar o log de erros do SQL Server depois de garantir que os logons com falha sejam registrados no log de erros .
Eu tive o mesmo erro com o código de estado 38 causado por um erro de digitação do nome do banco de dados na string de conexão.
Aqui está o que eu encontrei quando resolvi este erro: Eu criei algumas conexões SQL usando o login do Windows e não o nome de usuário e a senha. Não tenho certeza do que ou como aconteceu, mas aconteceu. Eu os excluí e depois reconstruí meus modelos de entidade. Usei outra string de conexão que sabia ser boa, e tudo é alegria. A chave é Persist Security Info=True, que não funcionará em uma rede ou site externo
Eu tinha 18456 com estado 38 também. Acabou que a string de conexão tinha 'integrated security=true' que não era o que eu queria. A cadeia de conexão continha o ID do usuário e a senha que deveriam ser usados. Quando mudei a configuração para false, tudo estava bem.
Recebi este erro ao tentar fazer logon em um SQL Server com várias instâncias. A cadeia de conexão não nomeou uma instância. Depois de nomear a instância (SERVERNAME\INSTANCENAME), consegui me conectar ao servidor.
@Pete Oakly está no caminho certo com a lista de códigos de estado. Especificamente, este é o código em que todos estamos interessados:
Meu problema começou em um log de erros C#:
Meus olhos estavam focados na parte "Falha no login" . Meu usuário era sa para este servidor de banco de dados, como o login poderia falhar?
Eu tropecei neste post por um trio de programadores que tinham a resposta: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /
Não é a falha de login em si, é o banco de dados que estou tentando acessar. Isso não existe!
Bingo! Eu mudei o nome do banco de dados por outros motivos e não atualizei o arquivo de configuração. Corrigido o nome do banco de dados e as coisas estão funcionando como um encanto mais uma vez.
No nosso caso no SQL Server Configuration Manager | Configuração de rede do SQL Server | TCP/IP | IP | A porta TCP NÃO foi definida.
Sem podermos estabelecer uma conexão ODBC e até mesmo usar uma conexão remota do SQL Management Studio e fazer login com o usuário. No entanto, cada vez que acessamos a url do nosso aplicativo Tomcat, ele lançava uma conexão jdbc, então detectamos no log do SQL Server o erro: Falha de login para o usuário 'xxxx': motivo Falha ao abrir o banco de dados definido explícito, erro 18456, gravidade 14 , Estado 38
Aqui um resumo da string de conexão jdbc
Isso para dizer que também na Configuração de Rede do SQL Server | Protocolos para <nome da instância> | Os pipes nomeados devem ser HABILITADOS e o nome do pipe
\\.\pipe\MSSQL$<instance name>\sql\query
deve ser definido corretamente.Bem, este é um erro relacionado à permissão do banco de dados. Estou adicionando minha solução nesta questão porque é muito importante entender o papel do DBA. Então vamos as minhas sugestões:
Agora, faça login com esse nome de usuário e você poderá conceder acesso ao usuário. Para fazer isso:
Vá para Segurança , clique com o botão direito em Logins e selecione Novo Login
Na janela de login, você pode digitar o nome de usuário ou pesquisá-lo. Selecione o usuário na lista e clique em OK e OK novamente.
Na mesma janela de login, clique em Server Roles e conceda o acesso ao usuário selecionado como: sysadmin, serveradmin, decreator etc; clique em OK .
Se você deseja conceder acesso a um banco de dados individual, vá para Mapeamento de usuários e forneça o acesso conforme sua necessidade.
Verifique o Status do banco de dados: Permissão: Conceder Login: Habilitado
Clique em OK
Outra causa possível para esse erro: um logon acabou de ser adicionado a um grupo do Active Directory que tem as permissões corretas, mas o token AD para o logon ainda não foi atualizado. Atualizar o token corrigirá o problema; uma maneira de fazer isso é pedir ao usuário que faça logout de sua estação de trabalho.