У меня SQL-сервер работает на машине, которая не в домене, и который не работает в смешанном режиме (работает с «Аутентификацией Windows»).
Я пытаюсь подключиться к нему с веб-сервера Linux, на котором работает freetds через TCP / IP, используя NTLM для аутентификации.
Брандмауэр на сервере SQL очень ограничен. 1433 открыт для моего веб-сервера, но я получаю из Интернета противоречивую информацию о том, какие дополнительные порты (TCP / UDP) необходимы для успешной работы NTLM. В настоящее время он не работает; Я могу поговорить по 1433, чтобы запросить NTLM, но фактическая аутентификация всегда терпит неудачу.
Один источник говорит, что 137, 138, 139, но это только порты NetBIOS. Они мне действительно нужны? Другой источник говорит 135. Третьи, кажется, говорят 1434 ... Я не могу понять это. Блин, Джим, я программист, а не сетевой администратор!
РЕДАКТИРОВАТЬ:
Точное сообщение об ошибке:
Msg 18452, Level 14, State 1, Server , Line 0
Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection.
Msg 20002, Level 9, State -1, Server OpenClient, Line -1
Adaptive Server connection failed
Я пытаюсь подключиться с помощью имени пользователя удаленного компьютера, то есть «servername \ username». Некоторые источники рекомендуют настраивать зеркальные учетные записи на локальном и удаленном компьютерах, но на локальном компьютере работает Linux, а не IIS под Windows.
Единственный порт, который вам нужен, - это 1433 как TCP. Это порт, используемый по умолчанию безымянными экземплярами SQL Server для TCP-соединений. FreeTDS инициирует соединение на этом порту и затем согласует аутентификацию NTLMv2 для этого соединения в виде серии обменов пакетами запроса / ответа. Афаик другой порт не нужен. Видеть Вход в домен.
Все остальные порты, которые вы упомянули, предназначены для соединений по именованным каналам, а FreeTDS делает не поддержка аутентификации NT по именованным каналам:
Поддержка доменных входов в FreeTDS ограничена стеком сетевых протоколов TCP / IP. FreeTDS в настоящее время не реализует поддержку SQL-соединений на основе именованных каналов, то есть соединений, передаваемых через интерфейс DCE / RPC, который использует TCP-порт 139, 445 или 135 на машинах Win32 в зависимости от типа инкапсуляции, используемой для DCE / RPC. сам.
Для аутентификации в качестве пользователя домена NT необходимо указать имя пользователя в форме «домен \ пользователь». Если SQL Server работает на автономном компьютере, то «домен» - это имя компьютера.
Я считаю, что реализация NTLMv2 в FreeTDS 0.82 в лучшем случае содержит ошибки. Eсть патч здесь Другой вариант - изменить групповую политику в окнах SQL Server для отправки ответов NTLMv1, как это предлагается в документации.
Вот Скриншот того, что вам нужно изменить на сервере Windows Server 2003. Вы должны воздействовать на других клиентов, подключающихся к серверу, чтобы убедиться, что вы можете сначала проверить это где-нибудь.
РЕДАКТИРОВАТЬ: Вы пытались включи вход и посмотреть, есть ли что-нибудь полезное?
Я не уверен, что вы сможете подключиться к этому серверу, если он не находится в домене и работает только в режиме Windows Auth. Какое имя пользователя вы добавили на сервер в качестве логина и под каким пользователем вы вошли с клиентской машины?
135–139 - это порты, используемые для SMB (чаще всего 445) и Windows RPC.
1434 UDP будет необходимо только в том случае, если вы используете браузер SQL для подключения к экземпляру, скажем, в случае именованного экземпляра (SERVERNAME \ INSTANCE), но если вы используете (SERVERNAME или SERVERNAME, PORT) и экземпляр обязательно работает на 1433, то дополнительных портов не потребуется. Вы можете проверить, открыт ли порт, введя «telnet SERVERNAME PORT» из командной строки.
Если сервер SQL размещен в одном месте, обратитесь к поставщику услуг совместного размещения, чтобы убедиться, что его локальный брандмауэр также не блокирует порт.