2

我正在尝试使用 PHP(在 IIS 中)连接到 Microsoft SQL 服务器数据库。代码中提供的用户/通行证是一个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 中做到这一点?

这种模拟配置是可能的原因吗?

PHP在用户下运行nt authority\iusr

如果它试图使用登录iusr,错误消息不会这样说吗?

我尝试在这台名为“TestDS”的机器上创建一个数据源并使用代码:

$conn = odbc_connect("TestDS", "", "");

但这给了我:

指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配,SQLConnect 中的 SQL 状态 IM014

Machine1 是一个试图访问网页的客户端(PHP 代码在 Machine2 上),Machine2 上的代码正在与 Machine3 建立 SQL 连接 ( servername)。

4

1 回答 1

2

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

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

于 2012-06-20T19:14:26.993 回答