Ошибка odbc driver 17

Обновлено: 04.07.2024

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

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

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

Это не работает Когда я ввожу имя пользователя и пароль и нажимаю «Далее», он останавливается на добрые 10–20 секунд, а затем, наконец, возвращается со следующей ошибкой:

Если я пытаюсь сделать то же самое, но изменить «сервер» с 123.456.789.012\SQLEXPRESS просто старого 123.456.789.012 , я получу другую ошибку:

Теперь я знаю, о чем ты думаешь. Вы можете подумать: «Да, вы, вероятно, не открывали брандмауэр для порта 1433, тупица». За исключением того, что я сделал, и я подтвердил это, поскольку я могу успешно запустить:

. из командной строки все, что я хочу. Так что я не уверен, что делать. Я знаю, что SQL Server существует, работает, и соединение ODBC может быть установлено правильно; Я просто не уверен, что я ошибся в настройках подключения, которые выдают эти ошибки. Исходя из последней ошибки, которую я перечислил, может показаться, что она может подключиться к серверу, но просто не может найти экземпляр (так как я не указал тот в тот раз). Так значит ли это, что мне просто нужно использовать какой-то другой синтаксис для указания IP вместе с именем экземпляра? Что я делаю? Заранее спасибо.

Нужно настроить вебсервер на соединение с базой данных MS SQL.
Среда: Windows NT 6.0, IIS 8.0, PHP 7.0.1
Сделала всё по инструкции. Установила php драйвер, скаченный с сайта микрософт ( php_pdo_sqlsrv_7_nts_x64.dll), вписала расширение в php.ini. Обновила сервер, в phpinfo появилась запись pdo_sqlsrv.
Запустила скрипт соединения с БД

Выдалась ошибка:
PHP Fatal error: Uncaught PDOException: SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver 11 for SQL Server to communicate with SQL Server.
Установили ODBC Driver 11.
Снова запуск скрипта и ошибка:
SQLSTATE[28000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Ошибка входа пользователя "имя пользователя"
Учетка рабочая. Через нее без проблем соединяюсь с БД через ssms.
Причем браузер почему-то не всегда выдает именно эту ошибку. Чаще так:
PHP Fatal error: Invalid handle returned
Не понятно что-то не так с учеткой или с настройками сервера? Учетка, к слову, составная: ИМЯ_ЛОКАЛЬНОЙ_СЕТИ\имя_пользователя. Может из-за этого слеша какие-то проблемы?
Помогите, плиз, разобраться.

  • Вопрос задан более трёх лет назад
  • 1921 просмотр

win авторизация подразумевает пользователя как имя_домена/имя_пользователя_в_домене или же имя_компьютера/имя_пользователя_на_компьютере

ну и сервер бд желательно указывать полностью как сервер[.домен]/инстанс

как правило MS предпочитает обратный слэш "\", но и прямые принимает.

а вот в $uid - я бы посмотрел - не лежит ли там вместо "server\mmm" нечто типа "server<перевод каретки>mm"

Ну вроде всё у нас соблюдено. То что я назвала именем локальной сети - это имя домена, на самом деле. И сервер указан тоже полностью, как вы написали. Перевода кареток нет точно. Даже пробовала вариант, предлагаемый микрософтом, когда $uid и $psw считываются из текстовых файлов. Обратный или прямой слеш в учетке ничего не меняет.
Пробовала также вот такой вариант соединения

Выдалась ошибка:
SQLSTATE[28000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Ошибка входа пользователя "имя_домена\имя_сервера_с_IIS$"
Что еще можно сделать?

NataliaCh, ну можно попробовать mixed авторизацию и попробовать подключиться учеткой sql сервера

Ну и четко убедиться, что php выражении $var = "server\user" одиночный обратный слэш не выполняет специальных функций экранирования спецсимволов. То бишь вывести на консоль или в файл содержимое переменных

Действительно дело было в том, что использовалась учетка для проверки подлинности Windows. А нужно было создать учетку для проверки подлинности SQL SERVER. И всё заработало!
Спасибо!

ODBC весьма полезен для процедур доступа к приложениям, особенно для профессиональных пользователей. И, похоже, существует множество проблем для пользователей Windows 10, которые либо перешли с Windows 7, либо обновили свою версию Windows 10 до последней версии.

Если вы один из них и у вас есть определенные проблемы с ODBC в Windows 10, проверьте решения ниже.

  1. Удалить SMBv1 и включить SMBv2/SMBv3)
  2. Проверьте брандмауэр Windows и Защитник Windows
  3. Обновление драйверов
  4. Откат к предыдущей версии Windows

Решение 1. Удалите SMBv1 и включите SMBv2/SMBv3)

Некоторые пользователи решили проблему, отключив SMBv1 и включив SMBv2 или SMBv3. Это можно сделать различными способами, начиная с PowerShell или редактора реестра. Последний способ быстрее и проще, но может негативно повлиять на ваш компьютер при неправильном использовании. Поэтому, прежде чем выполнять следующие шаги, обязательно сделайте резервную копию вашего реестра.

Вот как отключить SMBv1 и включить SMBv2/SMBv3:


  1. В строке поиска Windows введите regedit и откройте редактор реестра.
  2. Перейдите в ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters .
  3. Щелкните правой кнопкой мыши пустое пространство и создайте новый Dword, назовите его SMB1 и установите его значение равным 0.
  4. Щелкните правой кнопкой мыши на пустом месте и создайте новый Dword, назовите его SMB2 и установите его значение равным 1.
  5. Закройте редактор реестра и перезагрузите компьютер.

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

  • ЧИТАЙТЕ ТАКЖЕ: отключите SMBv1 в Windows с помощью этих быстрых методов

Решение 2. Проверьте брандмауэр Windows и Защитник Windows

Некоторым пользователям удалось решить проблему, просто добавив белый список или временно отключив брандмауэр Windows и включив Защитник Windows. Это долгосрочное решение, но оно того стоит. Если у вас уже есть сторонний антивирус, попробуйте объединить его с нативным антивирусом.

После этого перезагрузите компьютер и попробуйте снова получить доступ к приложению ODBC.

В случае, если вы используете 32-битный Office на 64-битной машине через ODBC, вам потребуется некоторая перенастройка, чтобы избежать ошибок драйвера. Или, скорее, доступ к версии ODBC32 вместо стандартной 64-битной версии, представленной в архитектуре x64.

Вот где его найти и как его запустить:


  1. Перейдите к C: WindowssysWOW64odbcad32.exe и запустите его. Это 32-битный администратор источника данных ODBC.
  2. Попробуйте применить драйверы снова.
  3. После того, как вы применили драйверы, перезагрузите компьютер.

Как говорили многие из затронутых пользователей, проблема возникла после того, как они обновили Windows 10 до версии 1803. То же самое можно применить к 1809. И вместо того, чтобы ждать, пока Microsoft решит проблемы ODBC в их текущем выпуске, мы скорее предлагаем откат до предыдущей версии, где сервис был полностью функциональным.

Вот как перейти к предыдущей версии Windows 10:


  1. Откройте Настройки .
  2. Выберите Обновление и безопасность .
  3. Выберите Восстановление на левой панели.
  4. Нажмите « Вернуться к предыдущей версии Windows 10 ».
  5. Нажмите Начало работы и следуйте инструкциям.

При попытке создать в Windows программу, которая подключается к базе данных через ODBC, я получил следующую ошибку:

[Microsoft] [Диспетчер драйверов ODBC] Имя источника данных не найдено, и драйвер по умолчанию не указан.

Я уверен, что мой код правильный. Он работал даже на другом ПК.

1 ответ

Что вызывает эту ошибку?

Это может иметь 3 распространенные причины:

  1. Драйвер, который вы пытались использовать, не установлен в вашей системе
  2. Драйвер установлен, однако он не соответствует разрядности кода, который вы используете.
  3. Вы допустили ошибку при вводе имени драйвера

Как мне проверить, какие драйверы установлены в моей системе?

Вы можете проверить драйверы, которые установлены в вашей системе, перейдя в Администратор источника данных ODBC. Чтобы открыть его, нажмите ⊞ Win + R и введите: odbcad32.exe . Затем проверьте вкладку Драйверы на наличие установленных драйверов. Столбец Имя указывает точное имя, которое вы должны использовать в строке подключения или DSN.

Если вы используете 64-битную Windows, в нем перечислены только 64-битные драйверы, установленные на ваша система. Чтобы увидеть, какие 32-разрядные драйверы установлены, нажмите ⊞ Win + R , введите: C:\Windows\SysWOW64\odbcad32.exe и перейдите в Драйверы tab снова.

enter image description here

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

Затем у вас есть два варианта: либо настроить разрядность, в которой работает ваша программа, либо установить драйвер с другой разрядностью.

Некоторые драйверы, которые по умолчанию устанавливаются в Windows, имеют только 32-разрядный вариант. Их нельзя использовать с 64-битными программами.

Обычно вы можете определить разрядность программы в диспетчере задач. В Windows 10 к имени всех 32-разрядных программ добавлено (32-разрядное). Если этого нет, скорее всего, вы используете 64-разрядную программу, а большинство современных языков программирования и сред по умолчанию работают на 64-разрядной версии, но позволяют переключиться на 32-разрядную версию. Однако специфика разных языков программирования выходит за рамки этого вопроса.

Как проверить, правильно ли я ввел имя драйвера?

Строка подключения ODBC выглядит так:

Часть имени драйвера должна быть ограничена фигурными скобками, если она может содержать специальные символы, и должна точно соответствовать имени установленного драйвера, как указано в ODBC Data Source Administrator, включая пробелы и типографские символы, но исключая использование заглавных букв.

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

У меня нет драйвера, или у меня неправильный бит, где мне взять правильный?

Это зависит от того, какой драйвер вы хотите использовать.

Список распространенных драйверов с указанием мест загрузки (все 32-битные и 64-битные по одному URL-адресу):

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

Читайте также: