MS SQL SERVER、PHP、PDO、ODBC:用户登录失败

Posted

技术标签:

【中文标题】MS SQL SERVER、PHP、PDO、ODBC:用户登录失败【英文标题】:MS SQL SERVER, PHP, PDO, ODBC: Login failed for user 【发布时间】:2013-02-03 20:50:11 【问题描述】:

我正在尝试使用字符串进行连接:

odbc:Driver=SQL Server Native Client 11.0;Server=(localdb)\v11.0;Database=test;uid=sa;password=123321;

结果:SQLSTATE[28000] SQLDriverConnect: 18456 [Microsoft][SQL Server Native Client 11.0][SQL Server]用户“sa”登录失败。

当我尝试使用 Windows ODBC 数据源管理器连接时,连接成功。

问题可能出在什么地方?

【问题讨论】:

在相关说明中,您似乎使用的是 Windows,因此也提供了 PDO driver 的 SQLSRV 扩展可能是 ODBC 的一个有趣的替代方案。 我试过了,但它甚至找不到实例 (localdb)\v11.0 或我使用 cmd/sqllocaldb 命令创建的实例 【参考方案1】:

网络用户“sa”没有访问 Microsoft SQL Server 的权限。 为网络用户提供对 Microsoft SQL Server 的访问权限的最佳方式是创建一个 Windows 组(例如 EGUSERS)并在 Microsoft SQL Server 的安全登录处允许 Windows 组服务器访问。 将所有需要访问 Microsoft SQL Server 的网络用户放入 Windows 组 (EGUSERS)。

【讨论】:

使用 Windows 组的连接字符串应该是什么样子? 或者如何使用windows身份验证通过ODBC连接? 请看this教程。 如你所见,我没有使用 ASP telnet 127.0.0.1 1433 OR 使用工具(osql,sqlcms,...)【参考方案2】:

检查您是否在 MSSQL Server 上设置了正确的身份验证模式: https://msdn.microsoft.com/en-us/library/ms188670.aspx

您还有两种方法可以通过 php/PDO 连接到 MSSQL,方法是使用 PHP_PDO_ODBC 扩展,该扩展使用连接字符串中给出的 ODBC 驱动程序,或者使用您可以在此处找到的 PHP_PDO_SQLSRV_xx_TS 或 PHP_PDO_SQLSRV_xx_NTS 扩展(仅适用于 32 位 PHP!)@987654322 @或者这里使用非官方的64位http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html

使用 PHP_PDO_SQLSRV_xx_(N)TS 扩展时的连接字符串:

$hostname='127.0.0.1';
$dbname='test';
$username='user';
$password='pw';
$dbDB = new PDO("sqlsrv:Server=$hostname;Database=$dbname", $username, $password);

使用 PHP_PDO_ODBC 扩展时的连接字符串:

//use any of these or check exact MSSQL ODBC drivername in "ODBC Data Source Administrator"
$mssqldriver = 'SQL Server'; 
$mssqldriver = 'SQL Server Native Client 11.0';
$mssqldriver = 'ODBC Driver 11 for SQL Server';

$hostname='127.0.0.1';
$dbname='test';
$username='user';
$password='pw';
$dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password);

当使用 PHP_PDO_ODBC 扩展测试一个返回 66 条记录的简单查询时,大约需要 500 毫秒(对于所有三个 MSSQL ODBC 驱动程序),但在使用 64 位(!)PHP_PDO_SQLSRV_TS 时需要大约 5000 毫秒。慢了10倍!尚未尝试 32 位或 NTS 变体。 我的开发 PC 是使用 WAMPx64 PHP 5.5.12 的 Windows 7 SP1,我使用的是 PHP_PDO_SQLSRV_55_TS

【讨论】:

以上是关于MS SQL SERVER、PHP、PDO、ODBC:用户登录失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误

使用 PDO 在 php 中使用 mac 运行 MS SQL 服务器存储过程

从 MS SQL 中的 PHP PDO 存储过程中返回 Select *

使用 PDO 驱动程序 PHP 在 sql-server 查询中循环

PDO_ODBC 的字符编码问题

SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中