3

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

如何让 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 - 我不知道如何从中粘贴信息,但它的输出似乎没有任何问题。

4

1 回答 1

2

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

可能的解决方案包括:

  • 在 SQL Server 上禁用 SSL/TLS
  • 使用与 SQL Server 的非安全连接
  • 将自签名证书添加到消费者的受信任证书存储区
  • 从公共 CA 获取受信任的证书(Namecheap 只需不到 20 美元即可)
于 2013-04-05T11:12:30.983 回答