Несколько портов указаны в строке подключения SQL Server - PullRequest
1 голос
/ 14 мая 2010

У меня есть старое приложение VB6, в котором имя сервера, имя базы данных, имя пользователя и т. Д. Определены в файле INI, но номер порта для строки подключения (по умолчанию 1433) жестко задан в приложении. Он перемещается на новый серверный сервер sql, который запускается под другим номером порта. Я пытаюсь избежать необходимости изменять и перекомпилировать приложение, что влечет за собой значительное повторное тестирование, документацию и т. Д. Я пытался изменить файл INI, чтобы для нового сервера я добавил: SERVERNAME \ INSTANCE, NEWPORTNUMBER

Это эффективно создает соединение с источником данных = SERVERNAME \ INSTANCE, NEWPORTNUMBER, 1433;

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

РЕДАКТИРОВАТЬ: строка, в которой строка подключения встроена в код VB6:

ConnectString = "Provider=MSDataShape;Trusted_Connection=Yes;Data Source=" & SERVER & ",1433;Initial Catalog=" & DATABASE & ";Data Provider=SQLOLEDB.1;Extended Properties=""Network=DBMSSOCN"""

со значениями SERVER & DATABASE, извлеченными из файла INI.

Ответы [ 5 ]

0 голосов
/ 17 мая 2010

Видимо это приложение быстро взломано вместе. Попробуйте взломать его с помощью простой инъекции в строку подключения, например SERVER="{your_server},{your_port};FooBar="

0 голосов
/ 14 мая 2010
  1. Скачать бесплатный редактор HEX
  2. Сохраните копию вашего оригинального exe-файла сейф
  3. Откройте exe в HEX-редакторе
  4. Найдите 1433 и измените его на свой новый номер порта

Как только это сработает, вам не нужно все заново тестировать (как при перекомпиляции)
Если новый номер порта не четырехзначный, он сложнее (путь наименьшего сопротивления: измените его на четырехзначный порт)

В прошлом я так менял строки подключения. VB6 exe всегда использует DBCS, поэтому вам, возможно, придется поиграть с шестнадцатеричным редактором, пока вы не поймете, как правильно использовать функцию поиска.

Если номер порта хранится в виде целого числа, его может быть сложнее найти, но все же возможно (ищите строки рядом с ним, чтобы найти подсказки).

0 голосов
/ 14 мая 2010

Порт 1433 обычно переопределяет INSTANCENAME. ( MS Blog Reference и еще )

3 варианта, которые я вижу:

  • Имя экземпляра игнорируется, и вы подключаетесь к экземпляру по умолчанию через порт 1433
  • Именованный экземпляр прослушивает порт 1433
  • У вас есть псевдоним клиента (не уверен насчет этого)
0 голосов
/ 14 мая 2010

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

Существует ли сетевая причина, по которой вам нужно использовать TCP / IP для подключения к серверу sql?

Я предполагаю, что вам просто нужно включить; после имени сервера / экземпляра и просто не указывать номер порта. Это приведет к тому, что номер порта будет лишним в строке подключения. Который, я думаю, просто игнорируется. Вы можете проверить создание строки подключения самостоятельно, создав файл test.udl и дважды щелкнув по нему - следуйте указаниям мастера. После того, как вы закончите, строка подключения находится в файле UDL, который вы можете просмотреть с помощью блокнота.

И, конечно, если вы ищете синтаксис для строк подключения, вы можете найти их на connectionstrings.com

0 голосов
/ 14 мая 2010

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

Если вы используете встроенную защиту, то, возможно, вы могли бы установить Источник данных в INI-файле, чтобы сказать «SERVERNAME, PORT; Password =», и позволить серверу SQL игнорировать ключ пароля, который не используется со встроенной защитой. Это если код, который создает строку подключения, не проверяет подобные вещи. О, Уилл Рикардс сказал, что это уже тоже кажется.

...