2015-06-10 1 views
10

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

$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 ?

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

error msg: Fatal error: Call to undefined function sqlsrv_connect()

+0

Mssql предназначен для дистрибутивов Linux. Не уверен, как вы его установили на машине для Windows (разместите ссылку на сборку, которую я хотел бы увидеть), но я не ожидал, что она когда-нибудь будет работать. Обновите до php 5.4, если вам нужно, чтобы он был намного более безопасным. и 5.3.1 является очень устаревшим и небезопасным в любом случае. – danielson317

+0

обновил вопрос, пожалуйста, проверьте его. – fishmong3r

+0

Не уверен, правильно ли я вас понял. Вы говорите, что ваш SQL Server настроен на прием только встроенной проверки подлинности Windows. Итак, запустите php-скрипт под пользователем Windows, который имеет права на подключение к SQL Server, или включите аутентификацию SQL Server в дополнение к интегрированной проверке подлинности Windows, как @ danielson317, описанную в первой точке его ответа. –

ответ

7

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

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

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

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

    1. Вы можете увидеть, если само расширение доступно путем создания страницы PHP только с функцией phpinfo() в нем , Затем найдите pdo_sqlsrv. Если он присутствует, остальные из этих проверок, вероятно, не нужны, но так как вы работали так долго, вероятно, все равно их проверяете.
    2. расширение sql_srv для PHP должен быть версии 3.2 для PHP 5.6 вы можете получить эту библиотеку here
    3. Версия 3.2 требует расширения ОС доступны here Проверьте другие требования к предыдущей ссылке. Ваш os может использовать другое расширение из того, что связано здесь.
    4. Найдите свой каталог расширений 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.
    5. Этот файл php.ini содержит эти строки extension=php_sqlsrv_55_ts.dll и extension=php_pdo_sqlsrv_55_ts.dll в этом порядке. но я не думаю, что порядок имеет значение. и снова ваш будет 56, а «ts» может быть «nts».
    6. Если вы внесли какие-либо изменения на основе этих данных, обязательно перезапустите apache, затем проверьте, находится ли pdo_sqlsrv в вашем отчете phpinfo(). Также после перезапуска apache проверьте журнал ошибок apache и php, чтобы узнать, не возникли ли у вас конкретные ошибки в PHP, пытающиеся загрузить расширения. Отправьте их здесь, если вам нужна помощь.
  3. После подключения к серверу SQL через AUTH creditionals в студии управления и увидеть pdo_sqlsrv в вашей phpinfo() вот последние вещи, чтобы посмотреть в в вашем коде.

    1. Ваш код, указанный выше, по-прежнему предназначен для расширения mssql. Вероятно, вы просто не обновили его своими последними изменениями. Для расширения SQL-сервера ваш код должен выглядеть следующим образом:

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

    2. Для проверки подлинности окон исключает UID и PWD.

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

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

+0

Прежде всего, спасибо за ваши усилия. Поэтому я пропустил весь 1-й раздел, поскольку ежедневно использую базу данных из других приложений. 2.1 У меня нет pdo_sqlsrv, загруженного в php info, (2.2), хотя у меня уже были драйверы. 2.3 Я никогда не слышал об этом, и, честно говоря, я не знаю, какой из них можно скачать. Не могли бы вы помочь? Также в системных требованиях я не вижу Win 2012 R2, но это ОС, на котором работает мой веб-сервер. – fishmong3r

+0

Требования, перечисленные в ссылке в направлении 2.2, отправляют вас здесь: https://msdn.microsoft.com/en-us/library/cc296170(v=sql.105).aspx, где указано, что 2012 R2 поддерживается версией sqlsrv 3.2. Так что просто скачайте программное обеспечение со ссылкой в ​​направлении 2.3 и установите его. Затем перезагрузите компьютер и завершите шаги. – danielson317

+0

@ fishmong3r И о том, где информация о ссылке в направлении 2.3 см. На этом скриншоте: http://www.evernote.com/shard/s600/sh/3a7e52ec-9e87-4092-9e79-32f3555fe21c/3603e231de919033e94e00e5d1cafe20 – danielson317

0

Вернитесь к стеку 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 на удаленной машине, что вызывает у вас головную боль.

+0

ОК, а после выше, как я могу использовать mssql_connect()? Это требует пользователя/пароля, правильно? Как вы можете установить интегрированный auth/SSPI? – fishmong3r

+0

@ fishmong3r Нет, это не так. Существует перегрузка mssql_connect ($ servername), для которой требуется только имя сервера. Вы используете Apache как услугу? –

+0

Да, он работает как услуга. – fishmong3r