我正在尝试使用 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 连接/链接到此数据库)我也尝试过:
- DOMAIN.ORG\myuser
- DOMAIN.ORG\\myuser
- [email protected]
我的域用户 (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/