Nie można zalogować się do programu SQL Server + uwierzytelnianie programu SQL Server + błąd: 18456

122

Utworzyłem konto logowania na moim serwerze localhost \ sql2008 (np. User123)

Mapowane do bazy danych (domyślnie)

Tryb uwierzytelniania na serwerze SQL jest ustawiony na oba (Windows i SQL)

Ale logowanie do SQL Server kończy się niepowodzeniem z następującym komunikatem (dla User123)

Uwaga: kilkakrotnie sprawdzałem, czy nazwa użytkownika / hasło są wpisane poprawnie

Szczegóły błędu:

Logowanie nie powiodło się dla użytkownika „User123” (Net.SqlClient Data Provider)

Nazwa serwera: localhost \ sql2008 Numer błędu: 18456 Ważność: 14 Stan: 1 Numer wiersza: 65536

jakakolwiek pomoc w tej sprawie, proszę.

Sreedhar
źródło
1
Przetestuj dostęp do uwierzytelniania SQL i Windows za pośrednictwem konsoli zarządzania SqlServer dla użytkownika i sprawdź, czy możesz uzyskać dostęp za pomocą powyższego konta. Jakiego dostawcy danych i parametrów połączenia używasz?
Joe Pitz
1
Próbuję zalogować się w SSMS i wyrzuca powyższy błąd.
Sreedhar
1
Możesz zalogować się jako konto administratora?
Joe Pitz
Zaloguj się jako administrator i sprawdź swój eventlog. Powód błędu powinien być tam wymieniony. Zajrzyj do folderu zarządzania
Joe Pitz
Alternatywą, która działała dla mnie, była stackoverflow.com/questions/28090747/ ...
Mark Schultheiss

Odpowiedzi:

49

Domyślnie komunikat o błędzie logowania nie powiódł się, ale serwer odmówił połączenia użytkownika klienta z powodu niezgodności poświadczeń logowania. Pierwszym zadaniem, które możesz sprawdzić, jest sprawdzenie, czy ten użytkownik ma odpowiednie uprawnienia do tej instancji SQL Server i odpowiedniej bazy danych, to dobrze. Oczywiście, jeśli niezbędne uprawnienia nie zostały ustawione, musisz naprawić ten problem, nadając odpowiednie uprawnienia dla tego logowania użytkownika.

Chociaż jeśli ten użytkownik ma odpowiednie uprawnienia do bazy danych i serwera, jeśli serwer napotka jakiekolwiek problemy z poświadczeniami dla tego logowania, uniemożliwi to przyznanie uwierzytelnienia z powrotem do SQL Server, klient otrzyma następujący komunikat o błędzie:

Msg 18456, Level 14, State 1, Server <ServerName>, Line 1
Login failed for user '<Name>'

Ok, co teraz, patrząc na komunikat o błędzie, wydaje się, że nie jest on opisowy, aby zrozumieć poziom i stan. Domyślnie błąd systemu operacyjnego pokazuje „Stan” jako 1, niezależnie od natury problemów z uwierzytelnianiem logowania. W celu dokładniejszego zbadania należy również przejrzeć odpowiedni dziennik błędów wystąpienia programu SQL Server, aby uzyskać więcej informacji na temat wagi i stanu tego błędu. Możesz zajrzeć do odpowiedniego wpisu w dzienniku jako:

2007-05-17 00:12:00.34 Logon     Error: 18456, Severity: 14, State: 8.
or

2007-05-17 00:12:00.34 Logon     Login failed for user '<user name>'.

Jak zdefiniowano powyżej, kolumny Severity & State dotyczące błędu są kluczem do znalezienia dokładnego odzwierciedlenia źródła problemu. Na powyższym błędzie numer 8 dla stanu wskazuje na błąd uwierzytelniania z powodu niezgodności hasła. Dotyczy książek online: Domyślnie wiadomości zdefiniowane przez użytkownika o wadze mniejszej niż 19 nie są wysyłane do dziennika aplikacji Microsoft Windows, gdy się pojawią. Zdefiniowane przez użytkownika komunikaty o wadze mniejszej niż 19 nie wyzwalają zatem alertów programu SQL Server Agent.

Sung Lee, menedżer programu w protokołach SQL Server (Dev.team) przedstawił dalsze informacje na temat opisu stanu błędu: Typowe stany błędów i ich opisy przedstawiono w poniższej tabeli:

ERROR STATE       ERROR DESCRIPTION
------------------------------------------------------------------------------
2 and 5           Invalid userid
6                 Attempt to use a Windows login name with SQL Authentication
7                 Login disabled and password mismatch
8                 Password mismatch
9                 Invalid password
11 and 12         Valid login but server access failure
13                SQL Server service paused
18                Change password required


Well I'm not finished yet, what would you do in case of error:

2007-05-17 00:12:00.34 Logon     Login failed for user '<user name>'.

Widać, że w dzienniku błędów tej instancji SQL Server nie zdefiniowano istotności ani poziomu stanu. Więc następną opcją rozwiązywania problemów jest przejrzenie dziennika zabezpieczeń Podglądu zdarzeń [edytuj, ponieważ brakuje zrzutu ekranu, ale otrzymasz plik

pomysł, zajrzyj do dziennika zdarzeń pod kątem interesujących wydarzeń].

Joe Pitz
źródło
1
Dzięki zobaczę i zobaczę, jak to idzie
Sreedhar
1
martwy link, rozważ zmianę
Chris Hayes
10
Powinna zostać wybrana lepsza odpowiedź poniżej tej, a nie ta.
void.pointer
4
Przeczytaj poniższy post.
Levi Fuller
6
@ void.pointer OP ustalił już, że „Tryb uwierzytelniania na serwerze SQL jest ustawiony na oba (Windows i SQL)”. Więc poniższy post nie ma związku z tym pytaniem.
Manachi
337

Musisz włączyć uwierzytelnianie SQL Server:

  1. W Eksploratorze obiektów kliknij prawym przyciskiem myszy serwer i kliknij „Właściwości”

Okno dialogowe Właściwości DBMS

  1. W oknie „Właściwości serwera” kliknij „Bezpieczeństwo” na liście stron po lewej stronie. W sekcji „Server Authentication” wybierz opcję radiową „SQL Server and Windows Authentication mode”.

Okno dialogowe uwierzytelniania SQL Server

  1. Uruchom ponownie usługę SQLEXPRESS.
PrateekSaluja
źródło
30
O, DZIĘKUJĘ milion razy. Głównie za słowo „restart” powyżej!
Magnus Smith,
4
Wiem, że to jest stare, ale całkowicie uratowało mi tyłek. Dzięki, Prateek. Doceniam to. MUSISZ zrestartować!
Levi Fuller
3
Dlaczego to powinno działać, jeśli OP wyraźnie stwierdza, że ​​„Tryb uwierzytelniania na serwerze SQL jest ustawiony na oba (Windows i SQL)”?
Tim Schmelter,
4
Ta odpowiedź jest zbędna i nieprzydatna w przypadku pytania. OP ustalił już, że „Tryb uwierzytelniania na serwerze SQL jest ustawiony na oba (Windows i SQL)”.
Manachi
1
To było niesamowite .. !! Dzięki PrateekSaluja
Amin powiedział
44

Miałem ten sam problem, jednak mój wynikał z tego, że nie ustawiłem uwierzytelniania serwera na „tryb uwierzytelniania serwera SQL i systemu Windows” (który miałeś). Chciałem o tym tutaj wspomnieć, na wypadek gdyby ktoś przegapił to w Twoim pytaniu.

Możesz uzyskać do tego dostęp przez

  • Kliknij prawym przyciskiem myszy instancję (IE SQLServer2008)
  • Wybierz „Właściwości”
  • Wybierz opcję „Bezpieczeństwo”
  • Zmień „Uwierzytelnianie serwera” na „Tryb uwierzytelniania serwera SQL i systemu Windows”
  • Uruchom ponownie usługę SQLServer
    • Kliknij prawym przyciskiem myszy instancję
    • Kliknij „Uruchom ponownie”
Nathan Koop
źródło
6
Spędziłem około dwóch godzin, ponieważ nie rozumiałem, że muszę RESTART całego serwera. To po prostu szalone, że do takiej rzeczy potrzebny jest restart. Microsoft nie ma ograniczeń co do wypluwanego przez siebie crapware.
Zarejestrowany użytkownik
1
Jest to również ważna odpowiedź na pytanie, dlaczego nie można połączyć się z instancją Amazon EC2, na której zainstalowany jest serwer SQL.
Teoman shipahi
19

Możesz uzyskać do tego dostęp przez

Right click on instance (IE SQLServer2008)
Select "Properties"
Select "Security" option
Change "Server authentication" to "SQL Server and Windows Authentication mode"
Restart the SQLServer service
    Right click on instance
    Click "Restart"

Tylko dla każdego, kto to czyta: to zadziałało również na SQL Server 2012. Dzięki

Barry
źródło
1
Dziękuję, to było idealne, od razu do rzeczy. Przyjęta odpowiedź jest pełna dobrych informacji, ale to zadziałało dla mnie.
Tony
4
To nie zadziała w przypadku OP, ponieważ wspomniał, że „Tryb uwierzytelniania na serwerze SQL jest ustawiony na oba (Windows i SQL)”.
Tim Schmelter,
1

Prawidłowym rozwiązaniem problemu jest upewnienie się, że uwierzytelnianie serwera SQL jest włączone dla serwera SQL.

Deepesh Bajracharya
źródło
1

Po włączeniu „trybu uwierzytelniania serwera SQL i systemu Windows” przejdź do poniższego.

  1. Zarządzanie komputerem (w menu Start)
  2. Usługi i aplikacje
  3. Menedżer konfiguracji programu SQL Server
  4. Konfiguracja sieci SQL Server
  5. Protokoły dla MSSQLSERVER
  6. Kliknij prawym przyciskiem myszy TCP / IP i włącz go.

Na koniec uruchom ponownie SQL Server.

Vasudev
źródło