如何在PHP中使用NT auth连接?

时间:2012-06-20 18:54:29

标签: php sql-server iis active-directory

我正在尝试使用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连接/链接到此数据库)我也尝试过:

  • DOMAIN.ORG \为myuser
  • DOMAIN.ORG \\为myuser
  • myuser@DOMAIN.ORG

我的域用户(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连接。

1 个答案:

答案 0 :(得分:2)

通过在连接字符串中指定“Trusted Connection = SSPI”,可以启用SQL Server连接中的“Windows安全性”。连接字符串中不存储用户名或密码(仅适用于“SQL Server安全性”)。运行PHP的过程(可能是php_cgi.exe本身)必须在Windows(在本地或AD)上运行,该Windows在SQL Server上注册了Windows登录。

在IIS下,php_cgi.exe在应用程序池的用户标识下运行。如果您有异构的安全环境,我建议为这个单一网站创建一个IIS应用程序池。