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

Поддельное соединение с базой данных должно быть локальным, а не удаленным

Я пытаюсь подключить одну из наших клиентских программ «как есть» к удаленной базе данных вместо локальной, они думают, что они закодировали ее для работы таким образом, но по какой-то причине программа вылетает при попытке подключиться к удаленной база данных. У меня нет исходного кода, поэтому я не могу копать намного глубже, а компания не предоставляет никаких обновлений или пользовательских модификаций. Я могу успешно подключиться к базе данных через SqlDbx и HeidiSQL, поэтому я знаю, что сервер настроен правильно.

Вот почему мне нужно найти способ подделать удаленное соединение на порту 1433, чтобы оно выглядело как соединение локальной базы данных с программой. Я думал о редактировании файла hosts, но, скорее всего, это приведет к сбою других программ, если я привяжу localhost к другому IP-адресу, чем 127.0.0.1.

Любые идеи?

ОБНОВИТЬ:

Я пробовал решить это другими способами, как предлагалось, но я перепробовал все, что мог придумать.

Единственное, что я вижу, это то, что что-то ограничивает его изнутри кода, над которым я не могу повлиять.

По сути, вы пытаетесь обойти то, что кажется чужой плохой реализацией. Мне это кажется разумным, а иногда и необходимостью. Если эта программа действительно "дает сбой" при попытке подключиться к одной базе данных, но не к другой, в отличие от, о, вы знаете, отображения сообщения об ошибке, это довольно слабый момент.

У меня есть резервное решение для этого в Linux ("redir") ... но не в Windows; однако я нашел это на машине Google:

http://www.vakuumverpackt.de/tcptunnel/

Я только что протестировал его с версией "Cygwin" - установка не требуется, у него есть exe и DLL, и он "просто работал" на моем ноутбуке с Windows 7. Аккуратный маленький бонус, у него есть --log-to-stdout вариант, который в сочетании с > в файл, записывает байты, полученные из потока (может быть интересно читать). У меня не было под рукой SQL Server, но я тестировал его с некоторыми другими службами TCP, и, похоже, он работает так, как задумано - он прослушивает локальный сокет, и когда приходят соединения, он устанавливает соединение с назначенным сокетом на удаленная машина и связывает концы труб вместе. Слушая 1433, он «должен» сделать свое дело.

Во всяком случае, это входит в мой набор инструментов.

Хотя вы, безусловно, можете использовать такие методы, как Перенаправление портов SSH чтобы удаленный прослушивающий TCP-сокет выглядел как локальный, это, вероятно, не поможет.

Если ваш клиент "дает сбой" при подключении, он, скорее всего, не перестанет делать это только потому, что вы используете другой IP-адрес назначения.

Может быть множество причин, по которым программное обеспечение работает нормально при подключении к локальной базе данных, но создает проблемы с удаленной базой данных, включая, помимо прочего,

  • проблемы с версией
  • использование разных протоколов (именованные каналы против TCP / IP)
  • проблемы с аутентификацией (встроенная аутентификация может работать локально, но не работает для удаленных систем)
  • проблемы с конфигурацией

Вам следует направить свои усилия на диагностику проблемы, а не на сомнительные попытки ее решения.