【问题标题】:How to use an NT auth connection in PHP?如何在 PHP 中使用 NT 身份验证连接?
【发布时间】:2012-06-20 18:54:29
【问题描述】:

我正在尝试使用 PHP(在 IIS 中)连接到 Microsoft SQL 服务器数据库。代码中提供的user/pass是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 建立 SQL 连接 (servername)。

【问题讨论】:

    标签: php sql-server iis active-directory


    【解决方案1】:

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

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

    【讨论】:

    • 我对我的问题进行了编辑。所以我应该将本地用户iusr 添加到 SQL 服务器?
    • 是的,但是在连接字符串中使用“受信任的连接”选项而不是用户名/密码。请注意,如果您的 SQL Server 位于不同的物理计算机上(并且您在计算机之间没有 Active Directory 信任关系),那么您将不得不使用 SQL Server 身份验证而不是 Windows 身份验证。
    • 我使用了 SQL 身份验证。
    猜你喜欢
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2011-12-16
    • 2019-10-11
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多