Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста
Я пытаюсь настроить свою виртуальную машину с SQL Server 2008 R2 Express, чтобы иметь возможность удаленного доступа к SQL только с помощью SQL Server Management Studio с хост-компьютера.
Конфигурация виртуальной машины
- под управлением Windows Web Server 2008 R2
- Есть две сетевые карты:
- Мост, так что он подключается к Интернету
- Только хост, чтобы я мог общаться быстрее через виртуальную сеть
- Службы SQL Engine и Browser работают
- Я включил протокол TCP/IP для SQL Express, но не настроил IP-адреса (отдельная вкладка)
- Я добавил входящие правила брандмауэра для:
- TCP-порт 1433
- 1434 UDP-порт
- Если я смотрю на сетевые подключения, я вижу, как мои сетевые карты подключены к сетям. Я могу установить мостовую сеть на рабочее место, но я не могу изменить тип сети только для хоста. Так что по умолчанию он установлен в Public. Я не уверен, имеет ли это какое-либо отношение к этому, но так оно и есть.
Конфигурация HOST
Единственное, что я сделал на своем хосте, - это то, что я присвоил имя своему виртуальному IP-адресу. И я сделал это с IP-адресом только для хоста. Я добавил запись в мой файл HOSTS.
проблема
Затем я открываю SSMS на своем хост-компьютере и, если я выберу " Обзор" в диалоговом окне " Подключиться к серверу ", я смогу увидеть экземпляр SQL моей виртуальной машины. Но когда я пытаюсь подключиться к нему, это то, что я получаю, когда пытаюсь подключиться следующими тремя способами:
имя машины (мой файл HOSTS выполнит переназначение IP)
Сетевой IP-адрес
IP-адрес только для хоста
Вопрос 1: Что еще я могу настроить, чтобы иметь доступ к экземпляру SQL моей виртуальной машины? Если возможно, я бы также хотел настроить его так, чтобы я мог получить к нему доступ только через сеть Hots-Only, а не через мостовую сеть. Но это было бы дополнительным бонусом, если бы я мог настроить его таким образом.
Вопрос 2: Нужно ли мне запускать браузер SQL, потому что, насколько я знаю, он заботится только о том, чтобы экземпляр SQL был обнаруживаемым. Если я знаю, что экземпляр SQL существует, и я знаю, что он использует порт 1433, я не могу просто подключиться, используя это имя сервера:
DATAVM\SQLEXPRESS,1433
редактировать
Это результат netstat:
Я также запустил portqry на хосте, чтобы проверить мой экземпляр SQL на моей виртуальной машине. Если я попробую подключенный по IP-адресу, я получу ответ от браузера SQL:
Starting portqry.exe -n 192.168.1.143 -e 1434 -p UDP ...
Querying target system called:
192.168.1.143
Attempting to resolve IP address to a name...
IP address resolved to Datavm
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName DATAVM
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.1600.1
tcp 49159
Как я вижу в этом результате, мой экземпляр SQL фактически прослушивает TCP-порт 49159.
Поэтому я пошел в конфигурации SQL и изменил этот порт на 1433.
Вопрос 3: это нормально, что порт не был установлен на 1433 по умолчанию? Должен ли я изменить его обратно на 49159 и изменить правило входящего брандмауэра, чтобы он проходил через этот порт, или я теперь оставлю его на 1433?
Изменяя порт на 1433, я могу подключаться к виртуальной машине с моей SSMS хост-машины. Но я могу сделать это только с помощью IP-адреса с мостовым соединением.
Как я понимаю настройки TCP/IP в протоколе SQL, IP-адреса должны перечислять все IP-адреса компьютера. Я вижу 5 из них:
- адрес NIC V6 моста
- адрес NIC V4 моста
- localhost V6 (:: 1)
- localhost V4 (127.0.0.1)
- немного? Адрес V6, который не связан ни с мостовой, ни с хост-сетью (fe80::100:7f:fffe%12)
Я предполагаю, что это также причина, по которой я не могу подключиться, используя сеть только на хосте... Но как мне настроить свою виртуальную машину, чтобы я мог (и, возможно, отключить мостовую)?
2 ответа
Решение
По мере того как я углублялся в это, все больше и больше казалось, что это скорее проблема сети, чем конфигурация SQL Server. И это было.
Я решил проблему с сетью, и вы можете прочитать о решении на ServerFault. Это поможет вам настроить виртуальную сеть только для хоста, чтобы она не была заблокирована так, как Windows устанавливает ее по умолчанию.
Но есть и другая вещь. И это **IP-адреса, которые можно увидеть в протоколе TCP/IP в конфигурации экземпляра SQL Server.
Проблема заключается в том, что этот список IP-адресов заполняется только при установке экземпляра SQL Server. Если вы внесете какие-либо изменения в свои сетевые адаптеры, эти изменения не будут отражены в конфигурации SQL Server. Это известная проблема с 2006 года, но она еще не решена.
В моем случае я добавил дополнительный сетевой адаптер, который предназначен только для хоста, и, поскольку мой экземпляр SQL уже установлен, эти IP-адреса не отображаются в конфигурации. Оказывается, вы можете вручную добавить эти новые или измененные настройки с помощью редактора реестра.
Перейдите к:
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Microsoft SQL Server
MSSQL10_50.[InstanceName]
MSSQLServer
SuperSocketNetLib
Tcp
Вы найдете все IP-адреса, которые вы можете настроить там. Поскольку мне пришлось добавить еще два адреса, я экспортировал IP2, а затем отредактировал сохраненный файл *.reg:
- Изменили первую строку и изменили IP2 на IPn (где n это текущий максимум + 1)
- Изменен IP-адрес и добавлен v6 IP-адрес сети только для хоста.
- Скопировал и вставил все эти строки
- Увеличенный IPn на 1
- Изменен IP-адрес и добавлен v4 IP-адрес сети только для хоста.
Сохранил файл и импортировал его в редактор реестра. Затем я могу увидеть еще два IP-адреса в редакторе реестра.
Открыл конфигурацию SQL Server, и да, у меня теперь есть два дополнительных OP-адреса в конфигурации экземпляра SQL протокола TCP/IP, которые я могу настроить индивидуально.
Вот и все. Работает.
Браузер SQL необходим для именованных экземпляров, если я правильно помню. Ваш именованный экземпляр прослушивает другой порт (который вы обнаружили), и браузер SQL обнаружит этот порт. Вы также можете настроить свой экземпляр на прослушивание определенного порта, используя сетевую конфигурацию SQL.
Я обнаружил, что сетевое взаимодействие между хостами и виртуальными машинами тоже иногда разочаровывает.
Вы пытались отключить брандмауэр на виртуальной машине только для проверки? Обычно это первый шаг в проблемах с указанием контактов. Более 90% проблем с подключением - это проблемы с брандмауэром.