Подключение к серверу MSSQL на PHP с использованием встроенной проверки подлинности

У меня XAMPP работает на MS Server 2012 R2. Мне нужно установить соединение с сервером MSSQL, который принимает только интегрированную аутентификацию выигрыша.
Если я просто попробую ниже, я получаю ошибку входа в систему и журнал ошибок на SQL Server, что проверка подлинности SQL не является вариантом. Он принимает соединение только от определенного пользователя. Очевидно, что PHP script не запускается под этой учетной записью.

$server = "sqlServerName";
$SQLUser = "username";
$SQLPass = "pw";
$SQLDatabase = "db";
$link = mssql_connect($server,$SQLUser,$SQLPass);

Поскольку я использую PHP 5.3.1 sqlsrv_connect, это не вариант. Я попытался загрузить драйверы php, но он просто не работает. Я не могу изменить аутентификацию для SQL-сервера, и я не могу использовать любую другую версию PHP.

Я также не могу включить secure_connection, поскольку мне нужно иметь возможность подключаться к другим серверам sql, для которых требуется обычная аутентификация sql:

mssql.secure_connection = Off

Как подключиться к моему проблемному серверу sql?

UPDATE: обновлена ​​ xampp до последней версии. PHP теперь версия 5.6.8 Я все еще не могу использовать sqlsrv_connect(), хотя я установил необходимый драйвер и добавил каждую отдельную dll в php.ini. Перезапущен apache несколько раз. Любая подсказка?

error msg: Fatal error: вызов функции undefined sqlsrv_connect()

Ответ 1

Ok. Трудно отладить проблему с сервером, не находясь на сервере, но я много сделал с php и SQL Server, поэтому сделаю все возможное, чтобы поделиться своими впечатлениями.

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

  • Сначала убедитесь, что вы можете подключиться к серверу sql, используя студию SQL Server Management, с предоставленными вами учетными данными. Это означает те же учетные данные, которые вы используете в php, а не учетные данные проверки подлинности Windows. Одновременно вы можете иметь оба соединения, чтобы вы могли вносить изменения и одновременно проверять соединение.

    • Включить tcp. Менеджер конфигурации сервера sql → Конфигурация сети SQL Server → протоколы для sqlexpress → tcp/ip (правый щелчок) → свойства → Включено (да) → IP-адреса → IPAll → TCP-порт 1433 → ok
    • Включить аутентификацию сервера SQL. Выберите сервер (щелкните правой кнопкой мыши) → свойства → безопасность → сервер и режим проверки подлинности Windows → ok
    • Откройте серверный порт sql на брандмауэре. Панель управления Windows → система и безопасность → брандмауэр Windows → расширенные настройки → Входящие правила → Новое правило → Порт → tcp → 1433 (или что-то еще) → Разрешить подключение → next → Name → sql server → finish → restart computer.
    • Конечно, если вы хотите подключиться через нестандартного пользователя, вам нужно добавить пользователя: sql server → security → logins (щелкните правой кнопкой мыши) → добавить логин → роли сервера → sysadmin → ok
    • Если вы сделаете какие-либо из этих изменений, перезапустите сервер sql: Sql server configuration manager → sql server services → sql Server (щелкните правой кнопкой мыши) → перезапустите.
  • Как только вы подтвердите, что можете подключиться к студию управления, здесь находятся проверки конфигурации php:

    • Вы можете узнать, доступно ли само расширение, создав в нем страницу php с функцией phpinfo(). Затем найдите pdo_sqlsrv. Если он присутствует, остальные из этих проверок, вероятно, не нужны, но поскольку вы работали так долго, вероятно, все равно их проверяете.
    • sql_srv расширение для php должно быть версии 3.2 для php 5.6, вы можете получить эту библиотеку здесь
    • Версия 3.2 требует наличия os-расширения здесь Проверьте другие требования по предыдущей ссылке. Ваш os может использовать другое расширение из связанного здесь.
    • Найдите свой каталог расширений php. Обычно это {php-install-directory}/ext. Убедитесь, что вы скопировали соответствующую версию загруженных библиотек sqlsrv в этот каталог. Mine называются "php_sqlsrv_55_ts.dll" и "php_dpo_sqlsrv_55_ts.dll". У вас будет 56 вместо 55, я думаю, и "ts" должен соответствовать вашей установке php. "ts" означает "безопасный поток", другой вариант "nts" не является безопасным для потоков. Тот, который вы используете, зависит от вашей установки php.
    • Мой файл php.ini содержит эти строки extension=php_sqlsrv_55_ts.dll и extension=php_pdo_sqlsrv_55_ts.dll в этом порядке. но я не думаю, что порядок имеет значение. и снова ваш будет 56, а "ts" может быть "nts".
    • Если вы внесли какие-либо изменения на основе этих данных, обязательно перезапустите apache, затем проверьте, находится ли pdo_sqlsrv в вашем отчете phpinfo(). Также после перезапуска apache проверьте журнал ошибок apache и php, чтобы узнать, не возникли ли у вас конкретные ошибки в PHP, пытающиеся загрузить расширения. Отправьте их здесь, если вам нужна помощь с ними.
  • Как только вы подключитесь к серверу sql через auth creditionals в студии управления и посмотрите pdo_sqlsrv в phpinfo(), вот последние вещи, которые нужно изучить в вашем коде.

    • Ваш код выше для расширения mssql. Вероятно, вы просто не обновили его своими последними изменениями. Для расширения сервера sql ваш код должен выглядеть так:

      $connectionInfo = array( 'UID' => $dbuser, 'PWD' => $dbpass, 'LoginTimeout' => 1, ); $host = $host . ', ' . $port; $connection = sqlsrv_connect($host, $connectionInfo); $error_messages = sqlsrv_errors();

    • Для проверки подлинности Windows исключить uid и pwd.

      $connectionInfo = array(); $conn = sqlsrv_connect( $host, $connectionInfo);

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

Ответ 2

Вернитесь к стеку PHP 5.3.1, где работает mssqlconnect(). Для интегрированного режима SQL Server требуется аутентифицированный пользователь, который имеет доступ к машине, на которой работает SQL Server. Поэтому, если вы можете подключиться к SSMS с вашим пользователем, вам нужно запустить XAMPP, Apache/httpd с учетными данными вашего пользователя. Если apache запущен как служба, зайдите на панель служб (services.msc при запуске), затем перейдите в Apache- > properties- > logon → "This Account" и введите свое имя пользователя и пароль, чтобы служба Apache выполнялась с вашим учетные данные, которые аутентифицируются для подключения к экземпляру SQL Server. По умолчанию httpd запускается с системной учетной записью, которая, очевидно, не аутентифицирована SQL Server на удаленной машине, вызывая головную боль.