无法通过PHP连接到MSSQL

时间:2017-06-08 19:06:39

标签: php sql-server apache ubuntu authentication

与MsSQL的连接失败。 错误讯息:

SQLSTATE: HYT00

Code: 0

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired

SQLSTATE: 08001

Code: 10057

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x2749

SQLSTATE: 08001

Code: 10057

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.

操作系统:Ubuntu 16.04

我根据guide安装了所需的所有驱动程序。

try {
  $conn = new PDO ("sqlsrv:Server=host.com\instance; Database = DBName",NULL,NULL);
  $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch( PDOException $e ){
  die(print_r( $e->getMessage()));
}

由于我使用的是Windows NT身份验证,因此我将用户名和密码留空。

真的需要帮助!!!!

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以为您提供的最佳信息(并且仅提供链接的风险)是以下MSDN帖子:SQL Server Driver for PHP: Understanding Windows Authentication

这可能是最有趣的部分:

(以下不是我的工作,而是Brian Swan的)

  

但要了解连接中使用的身份   企图令人困惑。什么有助于消除我的困惑是学习   this:用于连接服务器的标识将始终存在   是运行PHP的进程的标识。那可能是一个   有点过分简化(模仿允许过程暂时   使用不同的身份),但理解这允许我移动   向前。经过一些挖掘和一些实验,我找到了我   需要回答两个问题,以了解将使用什么身份   连接尝试:

     

1)IIS的身份验证模式是什么? (匿名身份验证?Windows身份验证?两者?)

     

2)是否开启或禁用了FastCGI模块? (即是   我的php.ini文件中的fastcgi.impersonate设置为0或1?)

     

这是我发现的:

     

:一种。已启用IIS匿名身份验证和fastcgi.impersonate = 1:因为我匿名连接到IIS,内置匿名   帐户(在IIS 7.0+中默认为NT AUTHORITY \ IUSER)是   冒充。所以,我的连接尝试失败了,因为这个身份   不映射到我服务器上的有效登录。

     

<强> B中。启用IIS匿名身份验证并且fastcgi.impersonate = 0:因为   冒充了,我的身份并没有被用作身份   PHP进程。相反,使用了PHP进程的实际身份   在连接尝试中。在IIS 7.5中,PHP进程的标识   取决于它运行的应用程序池的标识   在这种情况下,PHP处于默认应用程序池和标识中   在连接尝试中使用的是IIS APPPOOL \ DefaultAppPool(所以我的   连接尝试失败)。本文提供了更多信息   关于IIS的不同版本和应用程序的身份:谁   是我的IIS应用程序进程标识?

     

<强>℃。 IIS Windows身份验证已启用且fastcgi.impersonate = 1:使用Windows   启用身份验证(禁用匿名身份验证),我   使用我的Web浏览器正在运行的标识连接到IIS   在(Microsoft \ brian.swan,我登录的身份)。与   假冒,PHP进程在Microsoft \ brian.swan下运行   身份。所以,因为该身份映射到我的有效登录   服务器,我的连接尝试成功。

     

<强> d。 IIS Windows身份验证已启用且fastcgi.impersonate = 0:此处的结果与启用匿名身份验证的结果相同   fastcgi.impersonate = 0(连接尝试失败)。唯一的   当我从Web服务器请求页面时发生了差异:a   当我请求页面时,弹出窗口询问我的身份。

     

E.Both匿名和Windows身份验证启用: Web浏览器将   尝试首先使用匿名身份验证访问Web服务器。   因此,如果同时启用了匿名和Windows身份验证,则   结果将与上面的匿名身份验证相同   已启用(A和B)。有关此问题的更多背景信息,请参阅IIS   验证Web浏览器客户端。