使用PHP_SQLSRV在IIS8上连接到SQL Server 2012

时间:2013-04-05 10:30:24

标签: php asp.net sql

这是一个项目,因此不需要极端谨慎/安全 - 我希望让它工作,然后从那里改进它。

如何让PHP成功连接到SQL Server 2012

我成功完成了什么:

  • 在SQL Server 2012上启用混合身份验证
  • 使用SQL身份验证建立帐户
  • 在IIS上设置FastCGI并配置PHP.ini
  • .Web根目录中的.PHP脚本执行成功
  • 我可以使用SSMS使用我创建的凭据(SQL身份验证)在本地连接到SQL数据库

问题:

  • 我无法使用PHP脚本成功连接到本地SQL数据库。

我考虑过,但不太了解诊断:

  • 与IIS的HTTP连接是模仿IUSR,它有权在Web根目录中读取/执行PHP脚本,但可能没有权限连接到服务器?
  • 由于某种原因,我的连接对话根本无效

这是我的连接脚本:

$serverName = 'localhost';
$connectionInfo = array( 'Database'=>'DATABASE',
                       'Encrypt'=>'1', 'UID'=>'user', 'PWD'=>'password' );

$connection = sqlsrv_connect($serverName, $connectionInfo);

if( $connection == false )
{
  echo "No connection was established.\n";
  die( print_r( sqlsrv_errors(), true));
}

以下是我的错误(遗憾的是PHP并不能完全打印出来):

No connection was established. Array (
    [0] => Array (
        [SQLSTATE] => 08001
        [code] => -2146893019
        [message] => [Microsoft][SQL Server Native Client 11.0]SSL Provider: The certificate chain was issued by an authority that is not trusted.
    )
    [1] => Array (
        [SQLSTATE] => 08001
        [code] => -2146893019
        [message] => [Microsoft][SQL Server Native Client 11.0]Client unable to establish connection
    )
) 

当我通过浏览器加载脚本时,我也尝试使用进程监视器检查w3wp.exe - 我不知道如何从中粘贴信息,但它的输出似乎没有任何问题

1 个答案:

答案 0 :(得分:2)

错误消息很简单:您在SQL Server上使用的SSL证书是自签名的,因此不受消费者信任。

可能的解决方案包括:

  • 在SQL Server上禁用SSL / TLS
  • 使用与SQL Server的非安全连接
  • 将自签名证书添加到使用者的受信任证书存储
  • 从公共CA获取可信证书(Namecheap以低于20美元的价格执行)