Logowanie nie powiodło się dla użytkownika - Błąd 18456 - Istotność 14, stan 38

23

Komunikat, który pokazuje SQL Server Log File Viewer:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Co to właściwie znaczy:

Failed to open the explicitly specified database

Moje pytanie:

Czy jest gdzieś lista wszystkich odmian błędów 18456 (Logowanie nie powiodło się), dla każdej kombinacji dotkliwości i stanu, z pomocnym tekstem opisu?

Mam Google, ale nie mogę znaleźć niczego poza określonymi kombinacjami.

Pete Oakey
źródło

Odpowiedzi:

25

Kody stanów i ich znaczenie.

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

Bardziej szczegółowe informacje są dostępne na blogu Aarona Bertranda .

Pete Oakey
źródło
@PeteOakly jesteś na dobrej drodze tutaj dla stanu 38. Zobacz poniższy post o brakującej bazie danych jako jeden z powodów stanu 38.
John Dyer
4

Miałem ten sam błąd z kodem stanu 38 spowodowany literówką nazwy bazy danych w ciągu połączenia.

Rob Bowman
źródło
2

Oto, co znalazłem po rozwiązaniu tego błędu: Utworzyłem niektóre połączenia SQL przy użyciu loginu systemu Windows, a nie nazwy użytkownika i hasła. Nie bardzo wiem, co się stało, ale tak się stało. Usunąłem je, a następnie przebudowałem modele jednostek. Użyłem innego ciągu połączenia, o którym wiedziałem, że jest dobry, a wszystko to radość. Kluczem jest Persist Security Info = True, który nie będzie działał w sieci ani na zewnętrznej stronie internetowej

Bill W.
źródło
2

Miałem także 18456 ze stanem 38. Okazało się, że ciąg połączenia miał „zintegrowane zabezpieczenie = prawda”, czego nie chciałem. Ciąg połączenia zawierał identyfikator użytkownika i hasło, które miały być użyte. Kiedy zmieniłem ustawienie na false, wszystko było w porządku.

Dick Vandenberg
źródło
2

Wystąpił ten błąd podczas próby zalogowania się do programu SQL Server przy użyciu wielu instancji. Ciąg połączenia nie nazwał instancji. Po nazwaniu instancji (SERVERNAME \ INSTANCENAME) udało mi się połączyć z serwerem.

Nasser
źródło
2

@ Petete Oakly jest na dobrej drodze z listą kodów stanu. W szczególności jest to kod, którym wszyscy jesteśmy zainteresowani:

38 „Logowanie jest prawidłowe, ale baza danych niedostępna (lub logowanie nie jest dozwolone)”

Mój problem rozpoczął się w dzienniku błędów C #:

Wyjątek | Opublikowany wyjątek | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Nie można otworzyć bazy danych „InterestingDataBaseName” wymaganej przez login. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika „CORP \ anyuser”.

Moje oczy skupiły się na części „Logowanie nie powiodło się” . Mój użytkownik był dla tego serwera DB, jak może się nie udać logowanie?

Natknąłem się na ten post przez trio programistów, którzy mieli odpowiedź: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Nie jest to błąd logowania sam w sobie, to baza danych, do której próbuję uzyskać dostęp. To nie istnieje!

Bingo! Zmieniłem nazwę bazy danych z innych powodów i nie zaktualizowałem pliku konfiguracyjnego. Naprawiono nazwę DB i znów działa to jak urok.

John Dyer
źródło
1

W naszym przypadku w SQL Server Configuration Manager | Konfiguracja sieciowa programu SQL Server | TCP / IP | IP | Port TCP NIE został ustawiony.

Bez tego moglibyśmy ustanowić połączenie ODBC, a nawet użyć zdalnego połączenia SQL Management Studio i zalogować się do użytkownika. Jednak za każdym razem, gdy uzyskiwaliśmy dostęp do adresu URL naszej aplikacji Tomcat, uruchamiano połączenie jdbc, a następnie zauważyliśmy w SQL Server. Zaloguj się błąd: Logowanie nie powiodło się dla użytkownika „xxxx”: powód Nie można otworzyć jawnie zdefiniowanej bazy danych, błąd 18456, wskaźnik ważności 14 , Stan 38

Oto streszczenie ciągu połączenia 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" 

To znaczy, że również w konfiguracji sieci SQL Server | Protokoły dla <nazwa instancji> | Nazwane rury muszą być WŁĄCZONE, a nazwa rury \\.\pipe\MSSQL$<instance name>\sql\query musi być ustawiona poprawnie.

STI
źródło
1

To błąd związany z uprawnieniami do bazy danych. Dodam moje rozwiązanie w tym pytaniu, ponieważ bardzo ważne jest zrozumienie roli DBA. Oto moje sugestie:

  • Przejdź do Menedżera serwera
  • Wybierz Narzędzia, a następnie Zarządzanie komputerem
  • Sprawdź lokalnych użytkowników i grupy
  • Sprawdź nazwę administratora z opisem „Wbudowane konto do administrowania komputerem / domeną”

Teraz zaloguj się przy użyciu tej nazwy użytkownika i możesz udzielić dostępu użytkownikowi. Aby to zrobić:

Przejdź do Bezpieczeństwo , kliknij prawym przyciskiem myszy Loginy i wybierz Nowe logowanie

W oknie logowania możesz wpisać nazwę użytkownika lub ją wyszukać. Wybierz użytkownika z listy, kliknij OK i ponownie OK .

W tym samym oknie logowania kliknij Role serwera i przyznaj dostęp do wybranego użytkownika, takiego jak: sysadmin, serveradmin, decreator itp .; kliknij OK .

Jeśli chcesz udzielić dostępu do indywidualnej bazy danych, przejdź do Mapowania użytkowników i zapewnij dostęp zgodnie z wymaganiami.

Sprawdź status bazy danych: Pozwolenie: Przyznaj logowanie: Włączone

Kliknij OK

Priyanka
źródło
2
To może być całkiem dobrą odpowiedź jeśli można położyć nacisk na możliwości brakującym logowania SQL Server do bazy danych użytkownika relacji lub możliwość, że SQL Server Logowanie jest domyślna baza danych nie jest już dostępny. Obecnie twoja odpowiedź jest tylko ogólną rekomendacją dotyczącą sposobu założenia konta. Nie jestem pewien, w jaki sposób pierwsza część twojej odpowiedzi pomogłaby rozwiązać problem OP. Czy możesz wyjaśnić tę część?
John aka hot2use,