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.
sql-server
errors
logins
Pete Oakey
źródło
źródło
Miałem ten sam błąd z kodem stanu 38 spowodowany literówką nazwy bazy danych w ciągu połączenia.
źródło
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
źródło
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.
źródło
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.
źródło
@ Petete Oakly jest na dobrej drodze z listą kodów stanu. W szczególności jest to kod, którym wszyscy jesteśmy zainteresowani:
Mój problem rozpoczął się w dzienniku błędów C #:
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.
źródło
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
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.źródło
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:
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
źródło