Połącz się z SQL Server z uwierzytelnianiem systemu Windows w innej domenie


73

Próbuję połączyć się ze zdalnym programem SQL Server w sieci VPN w innej domenie. Kiedy wprowadzam nazwę serwera na serwerze SQL i wybieram dodatkowe parametry połączenia, aby dodać dodatkowe rzeczy potrzebne mojej szkole:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password

Otrzymuję następujący błąd:

Logowanie nie powiodło się. Login pochodzi z niezaufanej domeny i nie można go używać z uwierzytelnianiem systemu Windows.


Jedynym problemem związanym z rozwiązaniem Windows Credential Manager jest to, że jeśli masz wiele obsługiwanych baz danych, musisz mieć wpis dla każdego z nich i aktualizować je przy każdej aktualizacji haseł domeny. Dla niektórych osób może to być co 30 - 60 dni.
— smehaffie,

Ten post jest nieco powiązany.
— RBT

@ smehaffie możesz łatwo używać skryptów i polecenia „cmdkey / add”, aby zachować swoje hasła - aktualizuje się również.
— Mister Magoo,

Odpowiedzi:


70

Próbujesz przekazać poświadczenia systemu Windows zwykłym tekstem z ciągu połączenia aplikacji. To po prostu nie działa uwierzytelnianie systemu Windows i w dużej mierze jest to sprzeczne z celem.

Nie możesz też po prostu stworzyć tej samej nazwy użytkownika z tym samym hasłem we własnej domenie i oczekiwać, że zadziała to magicznie. Nazwa domeny jest nadal częścią sprawdzania poprawności - komputer musi być częścią domeny lub domena, w której znajduje się komputer, musi być zaufana przez domenę szkoły.

Jedyne obejście, jakie znam, dotyczy SSMS i taka jest runas /netonlysztuczka opisana w tej odpowiedzi . Powoduje to oszukanie systemu Windows do uruchamiania SSMS jako określonego przez Ciebie loginu, a nie własnego (nie jest to coś, co można ustawić w oknie dialogowym Właściwości połączenia SSMS, chodzi o to, jak uruchomić SSMS z wiersza polecenia lub skrótu):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"

Spowoduje to monit o podanie hasła w domenie zdalnej. Będzie to wyglądać tak jak to jest przy użyciu lokalnych poświadczeń systemu Windows, ale nie jest .

Możliwe, że będzie również działać z Visual Studio, ale tak naprawdę nie wiem.

Twoje opcje to:

  • niech uniwersytet pozwoli ci przyłączyć się do twojego komputera w domenie
  • poproś uniwersytet o dodanie Twojej domeny jako domeny zaufanej
  • mieć pole skoku w sieci VPN, które umożliwia RDP i używanie narzędzi łączących się bezpośrednio z maszyną SQL Server
  • używać uwierzytelniania SQL
  • wypróbuj runas /netonlysztuczkę z Visual Studio
  • po prostu użyj runas /netonlysztuczki z SSMS

runasSprawa ma pracować z Visual Studio.
— Daniel Hutmacher

Czy istnieje sposób naśladowania tego zachowania bez wiersza polecenia?
— Gilles Lesire,

1
@Gilles, możesz utworzyć plik wsadowy i kliknąć dwukrotnie plik wsadowy, lub możesz użyć tego ciągu i utworzyć skrót
— Aaron Bertrand

102

Jest inny sposób, którego teraz używam zamiast runas /netonlymetody.

Możesz dodać poświadczenia do swojego profilu w systemie Windows za pomocą Menedżera poświadczeń znajdującego się w panelu sterowania systemu Windows.

  1. Otwórz Credential Manager
  2. Kliknij „Dodaj poświadczenie systemu Windows”
  3. Wypełnij pole „adres internetowy lub sieciowy” nazwą i numerem portu instancji SQL, dla której chcesz przechowywać poświadczenia.

    Przykład: UniServer:1433(1433 jest domyślnym portem, możesz potrzebować innego portu, szczególnie jeśli łączysz się z nazwaną instancją)

  4. Wypełnij „Nazwę użytkownika” (nie zapomnij dołączyć domeny np. MYDOMAIN\MYUSER)
  5. Wypełnij „Hasło”
  6. Kliknij OK

Jeśli masz poprawną nazwę serwera, port i dane logowania, powinieneś być teraz w stanie korzystać z uwierzytelniania systemu Windows z większości narzędzi klienckich, SSMS, Excel, cokolwiek. Wszystkie wykorzystają zapisane poświadczenia.

Wskazówka: Czasami trzeba użyć nazwy FQN dla serwera podczas dodawania poświadczeń. np UniServer.UniDomain.org:1433. wszystko zależy od specyfiki sieci.

Oto krótkie demo metody: http://youtu.be/WiVBPsqB9b4

Jest to zrzut ekranu, w którym próbuję (i nie udaje mi się) połączyć z serwerem SQL Server uruchomionym na maszynie wirtualnej z mojego pulpitu, a następnie dodać wymagane poświadczenia i spróbować ponownie - z powodzeniem.

Wskazówka: użyj polecenia „cmdkey / add”, aby utworzyć skrypt i zaktualizować zapisane poświadczenia.


Ciekawy! Wydaje się, że zależy to od tego, co myśli twój komputer klienta, a nie od tego, jak może się on nazywać. Umieściłem wymyślony wpis („verysillytest.mwardm”) w moim pliku hosta dla adresu IP (jak to robią ci, którzy uzyskują dostęp spoza domen) i ustawiłem poświadczenie w nazwie „verysillytest.mwardm: 1433 ”. Następnie mogę połączyć się szczęśliwie (z małej aplikacji o nazwie Query Express) przy użyciu nazwy hosta lub adresu IP.
— mwardm

@mwardm tak, dlatego zalecam użycie polecenia ping lub nslookup, ponieważ poda ono nazwę dokładnie tak, jak trzeba jej użyć, w tym specyfikę wielkich / małych liter.
— Mister Magoo,

Ach, cóż „ping -a” nic mi nie dało, a nslookup nie (natychmiast) działał, ponieważ nie korzystałem z serwerów DNS domeny. Nie martw się, właściwie wolę elastyczność po prostu znać adres IP (i login) i mieć możliwość stworzenia własnego imienia!
— mwardm

1
Wspaniale, działa! Zastanawiam się - czy tak powinno działać, czy jest to błąd, czy błąd projektu po stronie SQL Servera? Microsoft lub ludzie z firmy Microsoft reklamują wszędzie, że musisz mieć maszynę podłączoną do domeny, w przeciwnym razie nie ma sposobu, aby połączyć się z SQL Server, który jest skonfigurowany tak, aby akceptował tylko poświadczenia domeny.
— Dawid Ferenczy Rogožan

BTW, powiedziałbym, że ta odpowiedź powinna być oznaczona jako zaakceptowana, ponieważ wydaje się, że jest to prawdziwe rozwiązanie, a druga odpowiedź bardziej przypomina obejście.
— Dawid Ferenczy Rogožan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.