Примечание: очевидно, я изменил имена серверов и 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, поэтому я не могу изменить драйвер. Я решил свой случай так:
Потом все заработало. Клиентская ОС: Win7 x64 Драйвер: sqlsrv32.dll
Как бы то ни было, я начал получать эту ошибку при подключении, которое ранее работало. Оказалось, что сервис MSSQL $ SQLEXPRESS каким-то образом остановился. Перезапуск устранил проблему.
У меня тоже была эта проблема, и это было так просто: сервер, указанный в качестве основного DNS-сервера для этого сервера, был удален, и приложение больше не могло правильно разрешать имя SQL-сервера в сети. Все сразу заработало снова, когда я исправил локальный DNS-сервер на работающий.