Я провел много исследований, пытаясь получить свой PHP-код, размещенный на IIS, для подключения к моей базе данных MSSQL. Я просто не могу понять проблему. Кто-нибудь сталкивался с этим раньше?
<?php
$serverName = 'AEGIS-PC\SQLEXPRESS';
$connectionInfo=array('Database'=>'tttb_db');
$con = sqlsrv_connect($serverName, $connectionInfo);
if($con){
echo 'Connection established<br />';
}
else {
echo 'Connection failed<br />';
die(print_r(sqlsrv_errors(), TRUE));
}
?>
Обновление, у нас новая ошибка:
Ошибка подключения
Массив ([0] => Массив ([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [код] => 18456 [2] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [ SQL Server] Ошибка входа для пользователя ‘NT AUTHORITY \ IUSR’. [Message] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Ошибка входа для пользователя ‘NT AUTHORITY \ IUSR’.) [1] = > Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Не удается открыть базу данных «tttb_db» запрошено именем входа. Ошибка входа. [message] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Не удалось открыть базу данных «tttb_db», запрошенную именем входа. Ошибка входа.) [2 ] => Массив ([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [код] => 18456 [2] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Войти ошибка для пользователя ‘NT AUTHORITY \ IUSR’. [message] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Ошибка входа для пользователя ‘NT AUTHORITY \ IUSR’.) [3] => Array ([ 0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Не удается открыть базу данных «tttb_db», запрошенную при входе в систему. Ошибка входа. [message] => [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] Не удается открыть базу данных «tttb_db», запрошенную при входе в систему. Ошибка входа. ))
Наш SQL-сервер использует проверку подлинности Windows, а имя нашего сервера AEGIS-PC\SQLEXPRESS
с именем пользователя и паролем блоки отображаются серым цветом. Я не могу придумать причину, по которой наш логин будет неудачным. Что мы делаем не так?
Есть несколько вещей, которые могут вызвать такие проблемы:
1.) Ваши модули не загружены, потому что это VC9 вместо VC11. Проверьте, какую версию компилятора использует ваша система, и установите правильный драйвер.
2.) Проверьте свою версию PHP и используйте правильный драйвер для вашей версии PHP, которую вы можете проверить в своем phpinfo()
,
3.) Не забудьте установить собственный клиент MSSQL, иначе вы не сможете подключиться к своей базе данных, что является проблемой, которая возникает у меня каждый раз.
Ваш код выглядит хорошо, и если вы получите сообщение об ошибке, sqlsrv_connect
не найдено, что является сигналом того, что модуль не загружен.
https://www.microsoft.com/en-us/download/details.aspx?id=20098
Вам необходимо добавить служебную учетную запись для системной учетной записи NT AUTHORITY \ IUSR, чтобы IIS получил доступ к базе данных.
Это ключевая часть строки ошибки:
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'
Когда кто-то заходит на веб-сайт и скрипт php пытается получить доступ к SQL Server, он делает это, используя системную учетную запись IIS, а не пользователя учетной записи веб-сайта. IIS может использовать проверку подлинности Windows для запроса БД. Ниже приведена информация о включении аутентификации Windows с IIS:
https://technet.microsoft.com/en-us/library/cc754628%28v=ws.10%29.aspx
Справедливое предупреждение, оно работает только в том случае, если пользователь, заходящий на веб-страницу, находится в том же домене AD, что и веб-сервер.
Будьте внимательны, какие привилегии вы назначаете системной учетной записи IIS, если вообще идете по этому пути.
Это просто простое решение, которое я нашел для себя. проверять, выписываться http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- пользователь-нт-authoritynetwork-сервис /
это всего лишь несколько шагов.
это должно исправить вашу проблему