php - 如何在 PHP 中使用 NT 身份验证连接?

标签 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]Login failed for user 'myuser'.

对于用户名(这是 AD 中的有效用户,我可以使用 Access 连接/链接到此数据库)我也尝试过:

我的域用户 (myuser) 通过 AD 拥有该服务器的管理员权限。但这会返回相同的登录失败错误。我有什么遗漏的吗?我可以使用 Access 连接到同一个数据库,没有任何问题(在同一用户下)。

我在 Access 中连接的方式是本地用户的 ODBC 数据源。数据源设置为“使用网络登录 ID 通过 Windows NT 身份验证”进行身份验证。我怎样才能在 PHP 中做到这一点?

this impersonation configuration可能的原因?

PHP运行在用户nt权限\iusr

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

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

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

但这给了我:

The specified DSN contains an architecture mismatch between the Driver and Application, SQL state IM014 in SQLConnect

Machine1 是一个尝试访问网页的客户端(其中 PHP 代码位于 Machine2 上),而 Machine2 上的代码正在与 Machine3 (服务器名称) 建立 SQL 连接。

最佳答案

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

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

关于php - 如何在 PHP 中使用 NT 身份验证连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126280/

相关文章:

php - 从ajax成功请求将数据插入数据库

php - Laravel 5 数据库问题

sql-server - 循环数据上的 CTE 产生意外结果

sql - 从临时表插入表

sql-server - SSMS : Unable to show XML in the SSMS Explorer

iis - IIS 日志中列出的浏览器列表

WCF 服务端点与主机基地址

php - 使用ajax发布多个值

iis - 表单例份验证状态 IIS 和 powershell

php - 从 2 个连接表 doctrine/symfony2 中选择列