Как библиотека pyms sql возвращается к порту именованного канала, когда порт 1433 закрыт? - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь удалить pyms sql и перейти на pyodb c в проекте python 3.6, в котором я сейчас работаю. Топология сети включает две машины, которые находятся в одной и той же локальной сети и имеют одинаковые значения su bnet. Клиент - это компьютер на базе Debian ARM, а сервер - windows box. Порт 1433 закрыт на коробке MS SQL, но порт 32001 открыт, и pyms sql все еще может удаленно подключаться к серверу, так как он каким-то образом возвращается к использованию порта именованного канала (32001).

Мой вопрос: как pyms sql может переключиться на этот другой порт и связаться с сервером? pyodb c не может сделать это, как будто я пытаюсь использовать порт 1433, он терпит неудачу и не пытается найти порт именованного канала. Я попытался покопаться в исходном коде pyms sql, чтобы увидеть, как он работает, но все, что я вижу, - это вызов dbopen, который заканчивается в библиотеке библиотеки freetds. Также просто для пояснения, t sql -LH возвращает информацию о названном пипсе и открытый порт, который соответствует тому, что я видел, используя netstat и nmap. Я на 100% уверен, что pyms sql вернется к использованию порта именованного канала, так как соединение с портом именованного канала устанавливается после соединения с pyms sql.

Любое понимание или указания относительно того, как pyms sql может сделать это, но pyodb c не может быть с благодарностью.

1 Ответ

1 голос
/ 12 февраля 2020

Удаление параметра PORT = и использование экземпляра SERVER = ip \ в строке подключения использует именованные каналы для подключения вместо порта 1433. Я до сих пор не уверен, как сам драйвер знает, как это сделать, но он работает и решил мою проблему.

...