Podłącz się do SQL Server na lokalnej maszynie wirtualnej Virtualbox

W ramach funkcjonalności kontrolki SSIS będziemy wykorzystywać SQL Server jako bazę dla tabel pomocniczych przechowujących informacje o plikach na serwerze, metadane przetwarzań i listę plików do pobrania. W tym celu pomyślałem, żeby wykorzystać jedną z maszyn wirtualnych postawionych na Virtualbox. System operacyjny maszyny to Windows 2012 R2 Standard z zainstalowanym SQL Server 2016 CTP3 jako instancją nazwaną. Co teraz trzeba zrobić, żeby połączyć się z systemu głównego/ gospodarza(?) (host) do systemu gościa (guest)?

W internecie oczywiście można od ręki znaleźć masę postów z podobnym pytaniem, ale jak to często bywa nie zawsze odpowiedzi są dobre. A nawet więcej jest takich, które zupełnie nie pomagają. W moim przypadku zadziałało dopiero podejście gdzieś czwarte, czy piąte – ale sam problem też nie wskazywał gdzie może być jego przyczyna. Do rzeczy.

Pierwsze – żeby udrożnić komunikację między komputerem i maszyną wirtualną budujemy sieć Host-only Network. Wchodzimy zatem w ustawienia VirtualBox Manager: File > Preferences… > Network > Host-only Networks i dodajemy nową sieć. Choć jest duża szansa, że gdy tam zajrzycie już tam będzie – bo zapewne jak ja grzebaliście kilka razy w różnych ustawieniach sieci.

VBoxHostOnlyAdapter

Albo z poziomu ustawień maszyny wirtualnej: Settings > Network dodajemy kolejny adapter Host-only i to co widać na wcześniejszym obrazku ustawia się automatycznie.

VBoxHostOnlyAdapterVM

Przechodzimy do ustawień. W oknie konfiguracji sieci VBox wchodzimy w ustawienia Host-only Networks i wybieramy utworzoną sieć (tutaj: VirtualBox Host-Only Ethernet Adapter). W zakładce DHCP Server jest pokazana konfiguracja domyślna, którą w tym przypadku w zupełności mi pasuje. Na obrazku jest zielona strzałka, bo nie mogłem się powstrzymać i musiałem coś dodać.

VBoxHostOnlyAdapterDetails

W zakładce Adapter ustawiamy adres IP maszyny hosta, który będzie widoczny dla wirtualki.

VBoxHostOnlyAdapterDetails2

OK. Teraz przechodzimy do maszyny wirtualnej i do łączenia się z serwerem utworzymy nowy login, dla uproszczenia z autoryzacją obsługiwaną przez SQL Server (w moim przypadku maszyna wirtualna nie jest podłączona do domeny). Dla wygody do testów utworzona została odrębna baza danych, która została przypisana jako domyślna.

SqlServerLogin

Skoro mamy założony login do serwera i użytkownika w bazie danych, to spróbujmy podłączyć się z poziomu Visual Studio. W projekcie SSIS prawy przycisk myszy na Connection Manager i wybieramy New Connection Manager. W oknie z wyborem typu zaznaczamy OLEDB i wciskamy Add… a potem w kolejnym oknie New… i wchodzimy na schody.

Bez problemu podpowie się nazwa serwera, nawet poprawnie podpowiedziało nazwę instancji na serwerze wirtualnym. Ale po podaniu użytkownika i hasła przy próbie podłączenia nie do końca działa.

ConnectionError1

Co pomogło? Na maszynie wirtualnej uruchamiamy Sql Server Configuration Manager i w sekcji SQL Server Network Configuration wybieramy ustawienia sieciowe instancji – Protocols for <nazwa instancji> i sekcję TCP/IP (zwróć uwagę, żeby była włączona – Status == Enabled). Teraz ważne są cztery ustawienia.

Po pierwsze – w zakładce Protocol ustawić Listen All na No. Po drugie – ustawić adres IP przyznany przez DHCP jako dostępny (Enabled), wyczyścić opcję TCP Dynamic Ports i dla TCP Port wpisać 1433, czyli domyślny port SQL Server. Po trzecie i czwarte – powtórzyć krok 2 dla adresu IP 127.0.0.1 (lokalny IPv4) i ::1 (lokalny IPv6). Jeśli nie ustawimy IPv6 możemy mieć (będziemy mieć?) problem z połączeniem się do instancji gościa np. z poziomu Powershell na hoście.

ConnectionConfig1

Po tym wszystkim należy zrestartować usługę SQL Server i powinno działać. Jeśli nadal jest problem – pokombinuj z firewallem na maszynie wirtualnej (== wyłącz / ustaw reguły). Zwróć też uwagę, żeby usługa SQLServer Browser była włączona.

Może nie do końca fajne jest, że instancja nazwana chodzi na przypisanym na sztywno porcie, ale najważniejsze, że można dostać się do serwera.

AKTUALIZACJA 22.05.2016.

Przy stawianiu nowej maszyny może się zdarzyć, że zwykłe polecenie ping z hosta do maszyny wirtualnej nie działa. Sprawdź wtedy w ustawieniach Windows Firewall With Advanced Security na maszynie wirtualnej, czy włączona jest reguła File and Printer Sharing (Echo Request – ICMPv4-In) w ramach Inbound Rules. Dzięki temu będzie można pingować maszynę po adresie IP.

Jeśli dodatkowo chcesz znaleźć maszynę wirtualną po jej nazwie – aktywuj regułę File and Printer Sharing (LLMNR-UDP-In) również w Inbound Rules.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s