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

30

Примечание. Я явно изменил имена серверов и IP-адреса на вымышленные.

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

Изображение хорошего соединения ODBC

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

Изображение плохой связи 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 вместе с именем экземпляра? Что я делаю? Заранее спасибо.

soapergem
источник

Ответы:

18

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

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

Хакан Винтер
источник
9
Я принимаю ваш ответ, потому что он направил меня на правильный путь. В диспетчере конфигурации SQL Server протокол TCP / IP уже был включен все время в разделах «Конфигурация сети SQL Server 2005> Протоколы для SQLEXPRESS» и «Конфигурация собственного клиента SQL> Протоколы клиента». Именованные каналы уже были включены в последнем. Я включил его в первом, но это, похоже, не помогло (те же сообщения об ошибках). Наконец, я переключил источник ODBC на использование драйвера «Собственный клиент SQL» вместо драйвера «SQL Server», и это, наконец, сработало.
Soapergem
Спасибо SoaperGEM! Я никогда бы не подумал, что попробовал собственный клиент SQL! Работал как шарм!
Филипп Сенн
5

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

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

Сим
источник
Использует ли подключение к серверу \ экземпляру на локальном компьютере механизм, отличный от удаленного?
Сэм
@ Сэм, см. Ответ Хакана Винтера.
Сим
4

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

servername\instancename,portnumber

Муфаса
источник
2
Это сделало это для меня, за исключением того, что мне не нужен номер порта.
bgmCoder
2

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


источник
1

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

thursdaysgeek
источник
Это именно то, что я пытаюсь сделать - чтобы система ODBC System DSN подключалась в первую очередь, когда я тестирую источник данных. Поэтому я попробовал ваше предложение, попробовав и то MYSERVER.domain.com\SQLEXPRESSи другое MYSERVER.domain.com, но оба они дали мне те же ошибки, которые я перечислил выше, соответственно.
Soapergem
В командной строке на другом компьютере введите «nslookup MYSERVER.domain.com» - это разрешает правильный IP-адрес (123.456.789.012) или вообще?
Сим
@Sim - Да, эта команда делает решимость должным образом.
Soapergem
1

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

aNullValue
источник
1

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

Sam
источник
0

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

Джон Гарденье
источник
Попытка двойной обратной косой черты приводит к той же самой ошибке 1326 (первая, которую я перечислил).
Soapergem
0

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

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

Тогда это начало работать. Клиентская ОС: Win7 x64 Драйвер: sqlsrv32.dll

Мерт Гюльсой
источник
0

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

dsteele
источник
0

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

yourcomputergenius
источник