Рейтинг:0

Невозможно подключить SQL Server из PHP с помощью проверки подлинности Windows

флаг cn

Я пытаюсь подключиться к MS-SQL Server из PHP-8.0 (хостинг на локальном хосте IIS-10) с помощью драйвера SQL Server для PHP, то есть SQLSRV-5.9. При подключении со страницы PHP, если я использую аутентификацию SQL Server, он сразу же подключается. Но при использовании проверки подлинности Windows в браузере выдается ошибка:

Не удалось установить соединение.
Массив ( [0] => Массив ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [код] => 18456 [2] => [Microsoft] [Драйвер ODBC 17 для SQL Server] [ SQL Server]Ошибка входа в систему для пользователя 'NT AUTHORITY\IUSR' [сообщение] => [Microsoft][ODBC Driver 17 для SQL Server][SQL Server]Ошибка входа в систему для пользователя 'NT AUTHORITY\IUSR'.) [1] => Массив ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [код] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Сервер]Ошибка входа для пользователя 'NT AUTHORITY\IUSR'. [сообщение] => [Microsoft][ODBC Driver 17 для SQL Server][SQL Server]Ошибка входа для пользователя 'NT AUTHORITY\IUSR'. ))

Моя среда — Windows 10 Pro, версия 21H2, 64-разрядная версия. В моем SQL Server включены как аутентификация Windows, так и аутентификация SQL Server, и я могу подключиться к серверу, используя оба из них через SQL Server Management Studio. Итак, что мешает моему PHP-коду подключиться к серверу с использованием проверки подлинности Windows? И PHP, и SQL Sever находятся на одном ПК. Что я делаю не так? Поскольку я новичок в PHP, не могли бы вы пояснить это на простом примере?

Ниже приведен мой код connect-db.php. Обратите внимание, как я использовал строку подключения для проверки подлинности Windows и SQL Server.

?php
    $serverName = "(локальный)"; // Необязательно использовать номер порта (по умолчанию 1433).
    $connectionString = массив("База данных"=>"TestDB"); // Строка подключения аутентификации Windows.
    // $connectionString = array("UID"=>"sa","PWD"=>"sa","Database"=>"TestDB"); // Строка подключения аутентификации SQL Server.
    $conn = sqlsrv_connect($serverName, $connectionString); // Подключаемся к серверу.

    если ($ конн === ложь) {
        echo "Не удалось установить соединение.<br/>";
        умереть (print_r (sqlsrv_errors (), правда));
    } еще {
        echo "Соединение успешно установлено.<br/>";
    }

    sqlsrv_close ($ соединение); // Закрыть ресурсы соединения.
?>

Спасибо и С уважением!

Рейтинг:0
флаг cn

Проблема заключалась в том, что у NT AUTHORITY\IUSR не было входа в систему SQL Server. В отличие от приложений .Net, IIS не использует вход с проверкой подлинности Windows по умолчанию, который поставляется вместе с установкой SQL Server. Он использует NT AUTHORITY\IUSR, о котором я не знал. Но NT AUTHORITY\IUSR не имеет входа по умолчанию или пользователя БД, созданного для него в SQL Server. Вам нужно создать их явно. Создание их и предоставление им соответствующих привилегий для вашей базы данных решило проблему. Теперь я могу войти с PHP, используя аутентификацию SQL Server. Надеюсь, это поможет зрителям в будущем.

Ответить или комментировать

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