Назад | Перейти на главную страницу

Как заставить работать это соединение ODBC с SQL Server?

Примечание: очевидно, я изменил имена серверов и IP-адреса на фиктивные.

Вот что происходит. У меня есть сервер, на который я звоню MYSERVER, под управлением Microsoft SQL Server Express 2005. Прямо на этом сервере я установил соединение ODBC, указывающее на себя, и оно уже отлично работает. Я вхожу в систему, используя проверку подлинности SQL Server (а не проверку подлинности Windows), и она настроена следующим образом:

Как я уже сказал, этот работает. Но затем у меня есть другой компьютер, который находится в совершенно другом домене / не в интрасети, которому нужен доступ к тому же самому SQL-серверу, размещенному на MYSERVER. Поскольку он находится в другом домене, он не распознает имя «MYSERVER»; Я должен указать его на IP-адрес MYSERVER, который мы скажем 123.456.789.012. Но соединение ODBC там, похоже, не работает. Я пробовал настроить это так:

Это не работает. Когда я ввожу имя пользователя и пароль и нажимаю Далее, он останавливается на 10-20 секунд, а затем, наконец, возвращается со следующей ошибкой:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Если я попробую то же самое, но поменяю "сервер" с 123.456.789.012\SQLEXPRESS просто старый 123.456.789.012, У меня другая ошибка:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Теперь я знаю, о чем вы думаете. Вы можете подумать: «Да, наверное, вы не открыли брандмауэр для порта 1433, пустышка». За исключением того, что я это сделал, и я проверил это, как мог успешно бегать:

telnet 123.456.789.012 1433

... из командной строки все, что хочу. Так что я не знаю, что мне делать. Я знаю, что SQL Server существует, работает и ODBC-соединение жестяная банка быть настроенным правильно; Я просто не уверен, что это такое. Я ошибся в настройках подключения, что вызывает эти ошибки. Исходя из последней ошибки, которую я указал, может показаться, что он может подключиться к серверу, но просто не может найти экземпляр (поскольку я не указывал его в тот раз). Значит ли это, что мне просто нужно использовать другой синтаксис, чтобы указать IP вместе с именем экземпляра? Что мне делать? Заранее спасибо.

Именованные каналы и протоколы TCIP для SQL Server 2005 по умолчанию отключены. Вы включили их в «Диспетчере конфигурации SQL-сервера»? Вы можете найти протоколы в конфигурации сети SQL Server и в конфигурации SQL Native client xx.

Само соединение с сервером работает благодаря протоколу «Общая память».

Включили ли вы Служба браузера SQL Server согласно Как настроить SQL Server 2005 для разрешения удаленных подключений?:

Если вы запускаете SQL Server 2005 с использованием имени экземпляра и не используете конкретный номер порта TCP / IP в строке подключения, необходимо включить службу обозревателя SQL Server, чтобы разрешить удаленные подключения. Например, SQL Server 2005 Express устанавливается с именем экземпляра по умолчанию Имя компьютера \ SQLEXPRESS.

Эта ветка исправлено то же сообщение об ошибке для меня при использовании Access для подключения к серверу MSSQL 2008. MSSQL 2005 и более ранние версии работали нормально, просто используя имя компьютера в строке подключения, но мне пришлось изменить строку подключения в Access к полной форме, когда экземпляр был обновлен до 2008:

servername\instancename,portnumber

У меня была такая же проблема, и мне удалось ее решить, заменив драйвер SQL на драйвер SQL Native Client. Это было странно, поскольку в моем случае это работало нормально в течение многих лет, а затем просто перестало работать. Я подозреваю, что это что-то вроде того, что драйвер поврежден, возможно, восстановление MDAC может помочь, но на данный момент я счастлив, что он вообще работает!

Узнал бы он имя сервера, если бы оно было полностью определено? Если бы это был MYSERVER.domain.com? Нам приходилось делать это с SQL Server при подключении из другого домена. Если вы можете получить подключение к системному DSN ODBC при тестировании источника данных, вы добиваетесь прогресса. Если он не подключается в настройке ODBC, сначала необходимо это исправить.

Используете ли вы именованные каналы или TCP в подключении ODBC, которое действительно работает? TCP включен?

Убедитесь, что для SQL-сервера включены удаленные TCP-соединения.

Это просто дикий выстрел, но что произойдет, если вы поставите двойную обратную косую черту перед именем сервера или IP-адресом? Мне просто кажется, что это обычно требуется для большинства других подключений Windows / Microsoft.

У меня была аналогичная проблема. В моем случае другой sw настраивает параметр ODBC, поэтому я не могу изменить драйвер. Я решил свой случай так:

  1. Установите настройки TCP / IP для сервера, чтобы использовать порт 1433
  2. На клиенте введите адрес сервера, например: 192.168.1.5,1433 (без имени экземпляра)

Потом все заработало. Клиентская ОС: Win7 x64 Драйвер: sqlsrv32.dll

Как бы то ни было, я начал получать эту ошибку при подключении, которое ранее работало. Оказалось, что сервис MSSQL $ SQLEXPRESS каким-то образом остановился. Перезапуск устранил проблему.

У меня тоже была эта проблема, и это было так просто: сервер, указанный в качестве основного DNS-сервера для этого сервера, был удален, и приложение больше не могло правильно разрешать имя SQL-сервера в сети. Все сразу заработало снова, когда я исправил локальный DNS-сервер на работающий.