我试图使用,即SQLSRV-5.9,从PHP-8.0 (托管在IIS-10本地主机上)连接到。当从PHP页面连接时,如果我使用Server身份验证,它将立即连接。但是在使用Windows身份验证时,它会在浏览器中抛出一个错误:
Connection could not be established.
Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'. ) [1] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\IUSR'. ) )我的环境是Windows 10 Pro,版本21H2,64位.在我的Server中,Windows身份验证和Server身份验证都已启用,我可以通过使用它们连接到服务器。那么,是什么阻止我的PHP代码使用Windows身份验证连接到服务器呢?PHP和Sever都在同一台PC上。我做错了什么?因为我是PHP的新手,你能用一个简单的例子来说明一下吗?
下面是我的连接-db.php代码。请注意如何将连接字符串用于Windows和Server身份验证。
?php
$serverName = "(local)"; // Optionally use port number (1433 by default).
$connectionString = array("Database"=>"TestDB"); // Windows Authentication connection string.
// $connectionString = array("UID"=>"sa","PWD"=>"sa","Database"=>"TestDB"); // SQL Server Authentication connection string.
$conn = sqlsrv_connect($serverName, $connectionString); // Connect to the server.
if($conn === false) {
echo "Connection could not be established.
";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection established successfuly.
";
}
sqlsrv_close($conn); // Close connection resources.
?>谢谢和问候!
发布于 2022-01-13 14:54:27
问题在于NT权限\IUSR没有在Server中登录。与.Net应用程序不同,IIS不使用Server安装附带的默认Windows身份验证登录。它使用NT权限\IUSR,这是我不知道的。但是\IUSR在Server中没有为它创建的任何默认登录名或DB用户。您需要显式地创建它们。创建它们并为您的数据库赋予各自的特权解决了这个问题。现在,我可以使用Server身份验证从PHP登录。希望这对后人有帮助。
https://serverfault.com/questions/1089801
复制相似问题