Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста

1953
Robert Koritnik

Я пытаюсь настроить виртуальную машину с SQL Server 2008 R2 Express, чтобы иметь возможность удаленного доступа к SQL только с помощью SQL Server Management Studio с хост-компьютера.

Конфигурация виртуальной машины

  1. под управлением Windows Web Server 2008 R2
  2. Есть две сетевые карты:
    • Мост, так что он подключается к Интернету
    • Только хост, поэтому я могу общаться быстрее через виртуальную сеть
  3. Службы SQL Engine и Browser работают одновременно
  4. Я включил протокол TCP / IP для SQL Express, но не настроил IP-адреса (отдельная вкладка)
  5. Я добавил входящие правила брандмауэра для:
    • TCP-порт 1433
    • 1434 UDP-порт
  6. Если я смотрю на сетевые подключения, я вижу, как мои сетевые карты подключены к сетям. Я могу установить мостовую сеть на рабочее место, но я не могу изменить тип сети только для хоста. Так что по умолчанию он установлен в Public . Я не уверен, имеет ли это какое-либо отношение к этому, но так оно и есть.

Конфигурация HOST

Единственное, что я сделал на своем хосте, - это то, что я присвоил имя моей виртуальной машине. И я сделал это с IP-адресом только для хоста. Я добавил запись в мой файл HOSTS.

проблема

Затем я открываю SSMS на своем хост-компьютере и, если я выберу « Обзор» в диалоговом окне « Подключиться к серверу », я смогу увидеть экземпляр SQL моей виртуальной машины. Но когда я пытаюсь подключиться к нему, это то, что я получаю, когда пытаюсь подключиться следующими тремя способами:

  • имя машины (мой файл HOSTS выполнит переназначение IP) Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста

  • IP-адрес в мостовой сети Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста

  • IP-адрес только для хоста Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста

Вопрос 1: Что еще я могу настроить, чтобы иметь доступ к экземпляру SQL моей виртуальной машины? Если возможно, я бы также хотел настроить его так, чтобы я мог получить к нему доступ только через сеть Hots-Only, а не через мостовую сеть. Но это был бы дополнительный бонус, если бы я мог настроить его таким образом.

Вопрос 2: Нужно ли мне запускать SQL Browser, потому что, насколько я знаю, он заботится только о том, чтобы экземпляр SQL был обнаруживаемым. Если я знаю, что экземпляр SQL существует и использует порт 1433, я не могу просто подключиться, используя это имя сервера :

DATAVM\SQLEXPRESS,1433 

редактировать

Это результат netstat: Настройка виртуальной машины с SQL Express для доступа через SSMS с хоста

Я также запустил 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 из них:

  1. адрес NIC V6 моста
  2. адрес NIC V4 моста
  3. localhost V6 (:: 1)
  4. localhost V4 (127.0.0.1)
  5. немного ? Адрес V6, который не связан ни с мостовой, ни с хост-сетью (fe80 :: 100: 7f: fffe% 12)

Я предполагаю, что это также причина, почему я не могу подключиться, используя сеть только на хосте ... Но как мне настроить свою виртуальную машину, чтобы я мог (и, возможно, отключить мостовую)?

1
Пожалуйста, проверьте, прослушивается ли порт `netstat -a`, и вы также можете настроить IP-адреса (шаг четвертый), чтобы увидеть, улучшается ли это. Tom Wijsman 12 лет назад 0
@ TomWijsman: Проверьте мой отредактированный вопрос, где я приложил результат ** netstat **, а также какое-то частичное решение, где я смог соединиться. но не так, как я хотел ... Пожалуйста, прочитайте выше. Robert Koritnik 12 лет назад 0
Рад, что вы на самом деле прогрессировали, я не очень хорош в настройках сети виртуальных машин, но просто хотел, чтобы вы добавили детали, которые могут помочь вам (или другим) найти решение. Удачи! :) Tom Wijsman 12 лет назад 0

2 ответа на вопрос

0
MikeJansen

Браузер SQL необходим для именованных экземпляров, если я правильно помню. Ваш именованный экземпляр прослушивает другой порт (который вы обнаружили), и браузер SQL обнаружит этот порт. Вы также можете настроить свой экземпляр на прослушивание определенного порта, используя сетевую конфигурацию SQL.

Я обнаружил, что сетевое взаимодействие между хостами и виртуальными машинами тоже иногда разочаровывает.

Вы пытались отключить брандмауэр на виртуальной машине только для проверки? Обычно это первый шаг в проблемах с указанием контактов. Более 90% проблем с подключением - это проблемы с брандмауэром.

Кроме того, добавьте процессы SQL к исключениям брандмауэра, а не к конкретным портам. Таким образом, не имеет значения, какие порты использует приложение. Вы говорите брандмауэру: «Это классное приложение, я бы доверил его своим детям». MikeJansen 12 лет назад 0
Возможно, вы захотите отредактировать свой ответ с этой информацией, а не оставлять его в качестве комментария. soandos 12 лет назад 0
@MikeJansen: Похоже, особенно если ваш сервер * открыт *, лучше ** не запускать SQL Browser **, потому что в конце концов он не нужен. Вы всегда можете подключиться, используя информацию о порте как ** machineName \ sqlInstanceName, portNumber **. Это просто работает. А поскольку приложение обращается к базе данных SQL (а вы - разработчик), порт является известной переменной. Запуск SQL Browser делает эту переменную общедоступной. И вместо добавления EXE в брандмауэр я просто добавил порт. Это спорно, какой из них лучше. Robert Koritnik 12 лет назад 0
@MikeJansen: и да ... я пытался отключить брандмауэр. Просто кажется, что я не могу подключиться через виртуальную хост-сеть ... Я думаю, что это должен быть отдельный вопрос сейчас, потому что он только частично связан с оригинальным вопросом. Robert Koritnik 12 лет назад 0
@MikeJansen: К вашему сведению: мне удалось настроить его сейчас, хотя я также задал вопрос по [ServerFault] (http://serverfault.com/q/359470/15651). [Это ссылка] (http://serverfault.com/a/359490/15651) для решения там. Robert Koritnik 12 лет назад 0
0
Robert Koritnik

Решение

По мере того, как я углубляюсь в это, все больше и больше казалось, что это скорее проблема сети, чем конфигурация 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:

  1. Изменили первую строку и изменили IP2 на IP n (где n это текущий максимум + 1)
  2. Изменен IP-адрес и добавлен v6 IP-адрес сети только для хоста.
  3. Скопировал и вставил все эти строки
  4. Увеличенный IP n на 1
  5. Изменен IP-адрес и добавлен v4 IP-адрес сети только для хоста.

Сохранил файл и импортировал его в редактор реестра. Затем я могу увидеть еще два IP-адреса в редакторе реестра.

Открыл конфигурацию SQL Server, и да, теперь у меня есть два дополнительных OP-адреса в конфигурации экземпляра SQL протокола TCP / IP, которые я могу настроить индивидуально.

Вот и все. Работает.

Похожие вопросы