使用Windows帐户通过PHP连接到SQL Server

时间:2012-07-17 14:32:00

标签: php sql-server odbc windows-authentication

我正在尝试使用PHP连接到另一台计算机上的SQL Server。我找到了两种方法。使用odbc_connect或sqlsrvr连接。

    $connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$serverName;Database=$db;", 'user', 'pass');

  $conn = sqlsrv_connect($serverName, array('UID' => '', 'PWD' => ''));

如果我尝试连接到SQL帐户,则连接有效。不幸的是,我无法使用Windows身份验证进行连接。

到目前为止,我已尝试过以下方法:使用了工作传递,添加了Trusted_Connection = yes;或综合安全= SSPI; 。我也试过将它与fastcgi.impersonate = 1或0结合起来。

当我直接使用我的用户并通过时,我得到登录拒绝错误,当我尝试使用sspi进行Windows身份验证时,我收到以下错误:用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。

我已经搜索了很多问题,但我找不到解决方案。然而,有些人在谈论php没有使用网络服务帐户,这可能是问题所在。

有谁知道我怎么能解决这个问题,或者可能给我一个领导?

提前谢谢。

6 个答案:

答案 0 :(得分:2)

我能够使用以下命令从单独的IIS服务器上运行的PHP建立到远程SQL服务器的可信连接:

$connectionInfo = array('Database' => $dbname);
$con = sqlsrv_connect($servername,$connectionInfo);

在php.ini中:

fastcgi.impersonate = 0
mssql.secure_connection = On

在我的PHP站点的IIS中:

Anonymous Authentication = Disabled
Windows Authentication = Enabled
Application Pool settings for site: Integrated, Network Service

$ dbname数据库的SQL Server上的数据库安全性:

create login: domainname\iisservername$  
map domainname\iisservername$ to db_datareader privilege for $dbname database

注意:iisservername中的$很重要。通过上述设置,IIS将与SQL Server建立可信连接,而无需在PHP文件中存储用户标识和密码信息。在本地,应用程序池使用的权限是"网络服务"。远程地,这些权限以用户domainname \ iisservername $。

的形式通过网络传递

答案 1 :(得分:1)

基本上问题是用于连接服务器的标识将始终是运行PHP的进程的标识

This链接可以为您提供帮助。

答案 2 :(得分:1)

对于IIS 7.5上的PHP,使用SSPI身份验证连接时没有用户名和密码。我必须做以下事情:

在我的IIS应用程序池高级设置中,我将其设置为使用自定义帐户Domain \ username给我需要PHP连接的用户。

在我的IIS特定网站中,我将基本设置更改为连接为相同的域\用户名。

在我的PHP代码中,我可以使用$conn = sqlsrv_connect($dbhost, array("Database" => $dbname, "UID" => "", "PWD" => ""));

进行连接

其他说明:fastcgi.impersonate = 1 我只有:启用匿名身份验证 *

答案 3 :(得分:1)

  1. 打开IIS控制台
  2. 使用所需的用户配置您的应用程序池标识,该用户必须具有SQL Server +数据库中的足够权限
  3. 选择“特定网站”
  4. 打开“身份验证”设置
  5. 右键单击“匿名身​​份验证”,然后单击“编辑”
  6. 最后选择选项:应用程序池标识(单选按钮),然后按“确定”按钮应用更改。

答案 4 :(得分:0)

您是否尝试过$conn = sqlsrv_connect($serverName);

数组是可选的。 Windows身份验证用作默认值。见MSDN article

IIS应启用Windows身份验证并关闭匿名访问。

答案 5 :(得分:0)

  1. 打开IIS控制台
  2. 转到您的网站
  3. 打开“身份验证”设置 右键单击“匿名身​​份验证”,然后单击“编辑” 最后选择选项:“应用程序池标识”(单选按钮),然后按“确定”按钮以应用更改。
  4. 转到“应用程序池”并获取应用程序池名称。
  5. 打开SSMS(SQL管理工作室),输入相关数据库并选择“安全性”。
  6. 添加新用户,仅填写名称并保存。用户名应为: IIS APPPOOL \ {YOUR_APP_POOL_NAME}

祝你好运!