【问题标题】:Cannot connect to MSSQL via PHP无法通过 PHP 连接到 MSSQL
【发布时间】:2017-06-08 19:06:39
【问题描述】:

与 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 身份验证,我将用户名和密码留空。

真的需要帮助!!!!

谢谢!!

【问题讨论】:

  • 您在使用 Kerberos 吗?请确认您的客户端是 Ubuntu 还是您的服务器。
  • 我的网络服务器是 Ubuntu。 Web 托管在远程 Ubuntu 虚拟机上。然后我现在正试图从我的本地机器访问该网站。加载网站时,后端需要与另一个远程数据库服务器通信。我与网站的连接很好,但是从网站后端到数据库的连接失败了。

标签: php sql-server apache ubuntu authentication


【解决方案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?)

这是我发现的:

A. 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 应用程序进程标识吗?

C. IIS Windows 身份验证已启用且 fastcgi.impersonate = 1: 使用 Windows 启用身份验证(并禁用匿名身份验证),我 以我的 Web 浏览器正在运行的身份连接到 IIS 在(Microsoft\brian.swan,我登录时使用的身份)下。与 模拟上,PHP 进程在 Microsoft\brian.swan 下运行 身份。因此,由于该身份映射到我的有效登录 服务器,我的连接尝试成功了。

D. IIS Windows Authentication enabled and fastcgi.impersonate = 0: 这里的结果与启用匿名身份验证的结果相同,并且 fastcgi.impersonate = 0(连接尝试失败)。唯一的 当我从 Web 服务器请求页面时发生了差异: 当我请求页面时,弹出窗口询问我的身份。

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

【讨论】:

  • 这是我面临的情况。我正在连接的 MS sql 服务器,它使用 NT 身份验证。那么,我可以做任何配置来连接到数据库吗?非常感谢。
  • 谢谢。这篇文章真的很有帮助。
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
相关资源
最近更新 更多