Falha no logon para o usuário - Erro 18456 - Gravidade 14, estado 38

23

Mensagem que o Visualizador do arquivo de log do SQL Server 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 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.

Pete Oakey
fonte

Respostas:

25

Códigos de estado e seu significado.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Informações mais detalhadas estão disponíveis no blog de Aaron Bertrand .

Pete Oakey
fonte
@PeteOakly você está no caminho certo aqui para estado 38. Veja o post abaixo sobre um banco de dados em falta como uma das razões para o estado 38.
John Dyer
4

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 cadeia de conexão.

Rob Bowman
fonte
2

Aqui está o que eu encontrei quando resolvi esse erro: Eu havia criado 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. Excluí-os 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

Bill W.
fonte
2

Eu tive 18456 com o estado 38 também. Aconteceu que a cadeia de conexão tinha 'segurança integrada = 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.

Dick Vandenberg
fonte
2

Eu recebi esse erro ao tentar fazer logon no 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 conectar-me ao servidor.

Nasser
fonte
2

@Pete Oakly está no caminho certo com a lista de códigos de estado. Especificamente, é neste código que estamos interessados:

38 'Login válido, mas banco de dados indisponível (ou login não permitido)'

Meu problema começou em um log de erro do C #:

Exceção | PublishedException | 000161 | 29/10/2018 | 11: 06: 40.210 | 16284 | InnerException | Não é possível abrir o banco de dados "InterestingDataBaseName" solicitado pelo logon. O login falhou. Falha no login para o usuário 'CORP \ anyuser'.

Meus olhos estavam focados na parte "Falha no login" . Meu usuário era sa para este servidor de banco de dados. Como o logon 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 é o login que está falhando, é o banco de dados que estou tentando acessar. Isso não existe!

Bingo! Alterei 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.

John Dyer
fonte
1

No nosso caso, no SQL Server Configuration Manager | Configuração de rede do SQL Server | TCP / IP IP A porta TCP NÃO foi configurada.

Sem isso, poderíamos estabelecer uma conexão ODBC e até usar uma conexão remota do SQL Management Studio e fazer login com o usuário. No entanto, cada vez que acessamos o URL do nosso aplicativo Tomcat, ele lançou uma conexão jdbc e identificamos no SQL Server o erro: Falha no logon para o usuário 'xxxx': motivo Falha ao abrir o banco de dados definido explícito, erro 18456, Severidade 14 Estado 38

Aqui um resumo da cadeia de conexão jdbc

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

Isso para dizer que também no SQL Server Network Configuration | Protocolos para <nome da instância> | As tubulações nomeadas devem ser ATIVADAS e o nome da tubulação \\.\pipe\MSSQL$<instance name>\sql\query deve ser definido corretamente.

Sti
fonte
1

Bem, este é um erro relacionado à permissão do banco de dados. Estou adicionando minha solução nesta pergunta porque, é muito importante entender o papel do DBA. Então, aqui estão minhas sugestões:

  • Vá para o Gerenciador do Servidor
  • Selecione Ferramentas e, em seguida, Gerenciamento do Computador
  • Verifique os usuários e grupos locais
  • Verifique o nome do administrador com a descrição 'Conta interna para administrar o computador / domínio'

Agora, faça o login com esse nome de usuário e você pode conceder acesso ao usuário. Para fazer isso:

Vá para Segurança , clique com o botão direito do mouse em Logins e selecione Novo Login

Na janela de login, você pode digitar o nome do usuário ou pesquisá-lo. Selecione o usuário na lista e clique em OK e OK novamente.

Na mesma janela de login, clique nas Funções do servidor e conceda o acesso ao usuário selecionado, como: sysadmin, serveradmin, decreator etc; clique OK .

Se você deseja conceder acesso a um banco de dados individual, acesse Mapeamento do Usuário e forneça o acesso conforme sua necessidade.

Verifique o status do banco de dados: Permissão: Grant Login: Enabled

Clique em OK

Priyanka
fonte
2
Esta poderia ser uma resposta muito boa se você pudesse colocar o foco sobre a possibilidade de uma falta SQL Server Login para Database User relacionamento ou a possibilidade de que o SQL Server Login 's banco de dados padrão não está mais disponível. Atualmente, sua resposta é apenas uma recomendação generalizada sobre como criar uma conta. Não sei como a primeira parte da sua resposta ajudaria a resolver o problema do OP. Você poderia explicar essa parte?
John aka hot2use