如何使用Windows身份验证连接MSSQL数据库的IIS PHP?

3
我是 PHP 的新手,遇到一个相当简单但很烦人的问题。
这里是设置:
- Windows 域环境 - 用户连接到运行 IIS7 和最新版本 PHP 的本地服务器 2008。 - 这个服务器有连接到本地 mssql 服务器的 php 脚本。
如果用户通过 php 脚本连接 mssql 服务器并导航到 http://iisservername/ ,它们会收到“NT AUTHORITY\ANONYMOUS LOGON”用户登录失败的消息。
我的解决方法是在 IIS 服务器上启动一个 cmd 脚本,使用 runas /profile /user:domain\user "c:\program files\internet explorer\iexplore.exe"。
我创建了一个 runas 行用于每个用户的 cmd 脚本并执行它。
启动后,它会导航到首页,这是我制作的 keepalive.php 脚本,它打开一个连接,然后 javascript 刷新页面每 x 分钟一次。
肯定有更好的方法可以做到这一点,对吗?

你是如何进行身份验证的?你是使用IIS的内置身份验证,还是有自己的方式? - Brad
如果是这种情况,PHP应该已经模拟登录的用户了。有一个选项可以改变这个行为...我不记得它在哪里了。也许它被禁用了?无论如何,我怀疑根本问题在于你连接SQL Server的方式。你能展示一下你建立连接的代码吗? - Brad
这就是我依赖的东西。我已经在IIS管理器中禁用了匿名身份验证,只启用了Windows身份验证,但仍然无法正常工作。我一定漏掉了一些简单的东西。 - Patrick Alexson
我相信phpinfo()会显示PHP正在以哪个用户身份运行。你能看一下,看看是否符合预期吗? - Brad
1个回答

3
如果您使用sqlsrv_connect并且正在使用IIS的内置身份验证,则应该为您处理,无需更多操作:
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);

(来自示例:http://msdn.microsoft.com/en-us/library/cc296205%28v=sql.90%29.aspx

这是我目前正在使用的:$serverName = "sql-server-name,port"; $connectionInfo = array( "Database"=>"dbname"); $conn = sqlsrv_connect( $serverName, $connectionInfo); - Patrick Alexson
为什么在本地使用"sql-server-name,port"而不是local呢?我问这个问题的原因是,即使服务器是本地的,因为你是通过servername,port连接到它,所以有可能你必须启用远程连接,而如果你从本地连接,则可能不需要启用远程连接。 - Phil W
我被告知它正在使用一个非默认端口,尽管服务器在10.x.x.x方案中是可ping通的。 - Patrick Alexson
SQL服务器是否与PHP服务器在同一台服务器上?如果不是的话,您必须启用远程连接以便sqlsrv能够使用Windows身份验证进行连接。如果它与PHP服务器在同一台服务器上,则IP/端口不是问题。 - Phil W
负面的,SQL在另一台服务器上。ISS/PHP服务器是分开的。看起来我们可能不得不走这条路。 - Patrick Alexson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接