Подключение к SQL Server с использованием проверки подлинности PHP, ODBC и Windows

Я пытаюсь использовать PHP для подключения к источнику данных ODBC с использованием проверки подлинности Windows. Я могу нормально подключиться к серверу на SQL Server, поэтому я знаю, что он работает. Когда я пытаюсь запустить команду

$link = odbc_connect("my_odbc","",""); 

Я получаю сообщение об ошибке:

"Предупреждение: odbc_connect(): ошибка SQL:
[Microsoft] [драйвер ODBC 11 для SQL Server] [SQL Server]
Ошибка входа для пользователя. ', состояние SQL 28000 в SQLConnect в C:\Users..."

Я пробовал:

$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};   
        Server='my_odbc';Integrated Security=SSPI","","");

Что вернуло сообщение:

Предупреждение: odbc_connect(): ошибка SQL:
[Microsoft] [драйвер ODBC 11 для SQL Server]
Поставщик именованных каналов: не удалось открыть соединение с SQL Server [53]., Состояние SQL 08001 в SQLConnect в C:\Users... "

Не уверен, что я делаю неправильно.

  • my_odbc - это SQL Server (2008) на другой машине. У меня нет прав администратора в этой базе данных, поэтому я не могу ничего изменить с этой целью (например, включить проверку подлинности SQL Server).

  • Я запускаю Windows 7 и с помощью PHP версии 5.6.12

  • phpinfo() указывает, что поддержка ODBC включена, а также pdo_sqlsrv поддержка

Ответ 1

Возможно, вам стоит попробовать PDO (разница в производительности не так уж велика) с плагином SQLsrv (это то, что я использую для подключения к другому программному обеспечению босса, использующего базу данных SQL Server 2008):

$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Вы можете скачать плагин здесь

https://www.microsoft.com/en-ca/download/details.aspx?id=36434

В Xampp вы должны скопировать dll в эту папку:

C:\xampp\php\ext

И вы должны добавить эту строку в свой php.ini

extension = php_pdo_sqlsrv_56_ts.dll

Примечание. Не забудьте перезагрузить сервер, чтобы он мог принять во внимание новый файл php.ini.

Сообщите мне, если это сработает для вас

Ответ 2

У кого-то было такое же сообщение об ошибке, и он спросил и ответил на свой вопрос здесь.

Процитировать...

Мне жаль неприятностей.

Проблема заключалась в том, что я использовал драйвер SQL Server Native Client 11.0 в качестве драйвера. Я переключил его на SQL Server, и теперь он работает:/

Надеюсь, это по крайней мере помогает кому-то, находясь в подобной проблеме....

Ответ 3

Значительное упущение из вашего вопроса заключается в том, как вы используете PHP и с какими учетными данными.

Предполагая, что вы используете IIS или Apache (или другой веб-сервер), ваш PHP-процесс, вероятно, работает под учетной записью локальной системы:

Свойства службы IIS Свойства службы Apache

Поскольку эта учетная запись является локальной, у нее нет авторизации для доступа к удаленному SQL Server.

Вы можете изменить службу IIS/Apache для запуска с учетными данными (вашими?), которым разрешено подключаться к SQL Server, но имейте в виду, что это может вызвать другие проблемы с разрешениями, а также быть проблемой, если вы измените ваш пароль в будущем.

Попробуйте запустить тест script из командной строки (который должен запускаться с вашими учетными данными по умолчанию), чтобы определить, где проблема:

php -r "var_dump(odbc_connect(...));"

Ответ 4

Эта ошибка является общей ошибкой, возникающей из-за невозможности установить соединение с сервером по некоторым причинам. Важно знать, какой сервер вы используете с PHP и используемым им приложением. Пример Apache, Xampp или Wamp и т.д.

Вот что вы могли бы попробовать.

Позвольте мне кратко, ниже ссылки ссылки.

  • Проверьте, не пинит ли он
  • Включить соединение TCP/IP. Конфигурация SQL Server, если она не включена. Для этого откройте SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled). Перезапустите службы SQL.
  • Включить удаленное подключение с сервера
  • Откройте порт, сделайте так Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL и сохраните.
  • Включить запуск служб обозревателя. SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser установить на выполнение.
  • определение порта в строке подключения
  • добавить имя экземпляра с именем машины, если используется более одного экземпляра

Пример

$user = 'username';
$pass = 'password';
//Use the machine name and instance if multiple instances are used
$server = 'serverName\instanceName';
//Define Port
$port='Port=1433';
$database = 'database';

$connection_string = "DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);

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

разрешение не удалось открыть соединение с SQL-серверами-ошибками

поставщик сервера sql с именем pipe provider error

Посмотрите также на эти ссылки.

Поставщик именованных труб: не удалось открыть подключение к SQL Server [53]

Ответ 5

Посмотрите на regedit HKLM/SOFTWARE/ODBC

какое имя вашей папки?

Если есть "SQL Server Native Client 11.0", тогда вам нужно написать свой php-код, например

odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");

Однако какой-то сервер, такой как сервер 2008, будет записывать этот odbc как

ODBC Driver 11 for SQL Server

Затем вам необходимо заменить собственный клиент SQL Server 11.0 драйвером ODBC 11 для SQL Server.

Ответ 6

Включить в IIS в Менеджере PHP o PDO_ODBC:

Я выполнил проверку подлинности Windows со следующей инструкцией PHP:

$Conn = новый PDO ( "odbc: Driver = {SQL Server}; Server = JAMILI-PC\SQLEXPRESS; null; null" );

Я использую Windows 2008.

Я надеюсь, что он решает вашу проблему.