2013-02-13 13 views
6

Mam projekt Visual Studio C++ (niezarządzanego C++), w którym próbuję połączyć się z wystąpieniem programu SQL Server 2008 na innym komputerze w sieci LAN. . IP Moje ciąg połączenia jest:Błąd programu SQL Server 2008 18456 stan 58, Logowanie nie powiodło się dla użytkownika "

"DRIVER={SQL Server Native Client 10.0};Server=tcp:169.254.204.232,1433;Network Library=DBMSSOCN;Initial Catalog=myDB;User ID=myDBUser;Password=myPassword;" 

ważny fakt: jestem w stanie z powodzeniem połączyć się zdalnie do tej instancji z identyfikatora użytkownika i hasła mojehasło myDBUser za pomocą SSMS - Korzystanie z trybu uwierzytelniania SQL (i określając TCP/IP w opcjach połączeń)! Również po zalogowaniu mogę z powodzeniem nawigować po bazie danych myDB

Tak, mam włączone uwierzytelnianie w trybie mieszanym na moim serwerze.

Należy również zauważyć, że ten sam kod został pomyślnie nawiązany, gdy moje wystąpienie było lokalne i korzystałem z uwierzytelniania systemu Windows. Innymi słowy, to, co zmieniło się od czasu ostatniej pracy, polega na tym, że przeniosłem swój serwer na inną maszynę, używam teraz uwierzytelniania SQL i dlatego zmieniłem ciąg połączenia - kod w ogóle się nie zmienił.

Oto komunikat o błędzie pojawia się w moim SQL Server 2008 logów serwera instancji:

Logowanie nie powiodło się dla użytkownika”. Powód:.. Próba logowania przy użyciu uwierzytelniania SQL udało Server jest skonfigurowany dla uwierzytelniania tylko systemu Windows błąd: 18456, Severity: 14, State: 58.

Zauważ, że użytkownik jest cytowany w tym komunikacie o błędzie jest pusty, choć w moim ciąg połączenia określić niepuste identyfikator użytkownika

innego połączenia. łańcuchy próbowałem, które dają taki sam wynik:

"DRIVER={SQL Server Native Client 10.0};Server=MACHINE2;Database=myDB;User ID=myDBUser;Password=myPassword;" (where MACHINE2 is the windows name of the machine hosting the sql server instance.) 

Nie określam nazwy instancji w powyższym łańcuchu połączenia, ponieważ moja instancja jest instalowana jako instancja domyślna, a nie nazwana.

Wszelkie pomysły na rozwiązanie tego problemu?

AKTUALIZACJA: Rozwiązałem ten problem, jak się wydaje. Czy jesteś gotowy, aby dowiedzieć się, jak głupio i całkowicie nie ma związku ten komunikat o błędzie? W ciągu połączenia właśnie zmieniłem "User ID" na "uid" i "Password" na "pwd", a teraz to działa. Teraz widzę komunikat "Połączono pomyślnie" w dziennikach serwera SQL Server ...

+1

Podajesz, że masz włączone uwierzytelnianie w trybie mieszanym, ale komunikat o wyjątku wyraźnie stwierdza inaczej. Czy nastąpiło ponowne uruchomienie od czasu zmiany trybu uwierzytelniania? Zobacz ten post: http://stackoverflow.com/questions/8441158/an-attempt-to-login-using-sql-authentication-failed – Jacco

Odpowiedz

2

Odpowiedź: W ciągu połączenia właśnie zmieniłem "ID użytkownika" na "uid" i "Hasło" na "pwd", a teraz działa. I teraz zobacz "Połączenie nawiązane" w moim SQL Server dzienniki ...

8

Spróbuj uruchomić SELECT SERVERPROPERTY('IsIntegratedSecurityOnly');, jeśli zwróci 1, będzie uwierzytelnianie systemu Windows, jeśli 0 mieszane. Jeśli zwróci 1, to zdecydowanie Windows Uwierzytelnienie i musi być coś jeszcze nie tak.

+0

Zwraca 0. Jeśli rozumiem poprawnie, oznacza to, że mój serwer jest w trybie uwierzytelniania mieszanego jako Spodziewam się/potrzebuję tego? –

+0

Dobra, SQL Server to zdecydowanie mieszane uwierzytelnianie ... czy hasło jest krótkie? można usunąć zaznaczenie zasad dotyczących haseł egzekwowania we właściwościach bazy danych, chociaż stwierdzono, że można się połączyć zdalnie, a jeśli zasady były włączone, a hasło było krótkie, nie można połączyć się zdalnie. –

+0

Inną opcją byłoby nie określać portu w twoim połączeniu: 169.254.204.232 zamiast 169.254.204.232,1433 –

5

myślę rozwiązać ten problem w ten sposób ...

prawym przyciskiem myszy na nazwa_serwera na Object Explorer -> Właściwości -> Zabezpieczenia -> Zmieniono uwierzytelnianie serwera na serwer SQL i tryb uwierzytelniania Windows -> kliknij OK.

po tym otwartym serwerze na eksploratorze obiektów -> Rozwiń zabezpieczenia -> Rozwiń Zaloguj się -> kliknij prawym przyciskiem myszy swój login -> właściwości -> wpisz nowe hasło -> potwierdź hasło -> OK.

następnie odłączyć SQL i ponownie uruchomić system. następnie zaloguj się SQL Server 2008 ze zmienionym hasłem w trybie uwierzytelniania sql.

Dzięki :)

Powiązane problemy