我正在尝试使用PHP(在IIS中)连接到Microsoft SQL Server数据库。代码中提供的用户/传递是一个AD帐户,可以通过Access中的ODBC访问数据库。
$serverName = "servername";
$connectionInfo = array( "Database"=>"dbname", "UID"=>"myuser", "PWD"=>"mypass");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br /><pre>";
die( print_r( sqlsrv_errors(), true));
}
用户名和密码有效,服务器名称和数据库名称也是如此。但是这会返回错误:
[Microsoft] [SQL Server Native Client 10.0] [SQL Server]用户“myuser”登录失败。
对于用户名(AD中的有效用户,我可以使用Access连接/链接到此数据库)我也尝试过:
我的域用户(myuser
)通过AD拥有该服务器的管理员权限。但是返回相同的Login failed
错误。有什么我想念的吗?我可以使用Access连接到同一个数据库而没有问题(在同一个用户下)。
我在Access中连接的方式是本地用户的ODBC数据源。数据源设置为“使用网络登录ID进行Windows NT身份验证”进行身份验证。我怎么能用PHP做到这一点?
this impersonation configuration是可能的原因吗?
PHP在用户nt authority\iusr
如果尝试使用iusr
登录,则错误消息不会这样说吗?
我尝试在这台名为“TestDS”的机器上创建一个数据源并使用代码:
$conn = odbc_connect("TestDS", "", "");
但这给了我:
指定的DSN包含驱动程序和应用程序之间的体系结构不匹配,SQLConnect中的SQL状态IM014
Machine1是一个尝试访问网页的客户端(PHP代码在Machine2上),而Machine2上的代码正在与Machine3(servername
)建立SQL连接。
答案 0 :(得分:2)
在IIS下,php_cgi.exe在应用程序池的用户标识下运行。如果您有异构的安全环境,我建议为这个单一网站创建一个IIS应用程序池。