【问题标题】:PHP unable to connect to SQL Server 2016PHP 无法连接到 SQL Server 2016
【发布时间】:2020-01-31 15:42:19
【问题描述】:

我已在此处搜索了有关此问题的所有可用主题,但没有一个答案对我有用。

我已安装(Windows 10 64 位)Apache2.4(64 位)、PHP 7.4.2(64 位)和 SQL Server 2016(64 位)。 我已经更新了 php.ini 以包含

extension=php_sqlsrv.dll

它来自包 php_sqlsrv-5.7.1preview-7.4-ts-vc15-x64 并且当我运行 php -m 以列出所有模块 sqlsrv 已列出。

但是,当我尝试从 PHP 文件连接到 SQL 服务器时,它会失败并显示错误消息。

<?php  
 $serverName = "MYPC\\SQLINSTANCE"; 
 $uid = "sa";   
 $pwd = "thePassword";  
 $databaseName = "TesterDB"; 

 $connectionInfo = array( "UID"=>$uid,                            
                     "PWD"=>$pwd,                            
                     "Database"=>$databaseName); 

 /* Connect using SQL Server Authentication. */  
 $conn = sqlsrv_connect( $serverName, $connectionInfo);  
 if( $conn )
 {
     echo "Connected";
 }
 else
 {
  echo "Error";
  die( print_r( sqlsrv_errors(), true));
 }
?>

错误信息:

用户“sa”登录失败。 ) [1] => 数组 ([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无法打开请求的数据库“TesterDB” 通过登录。登录失败。

登录名和密码正确,PC 和实例名称也正确。 还有什么可能导致连接失败?一些格式问题?有些不兼容?

【问题讨论】:

  • 您为什么首先尝试使用sa 帐户连接到您的SQL Server?应用程序永远不应使用sa 帐户。我首先建议创建一个仅具有您的应用程序所需权限的登录名。然后,如果失败,请查阅 SQL Server 的日志,它会告诉您身份验证失败的确切原因(如果您不理解错误,请将其包含在您的问题中)。
  • “在我们使用的软件中,sa账户总是用来访问这个实例和数据库的。”嗯,这个需要改一下;这是一个糟糕的主意,原因有很多。如果您是网站,在这种情况下,该人可以访问字面上做他们想做的任何事情。你真的需要尽快修复你的安全模型。
  • “坦率地说,这对我没有兴趣” 因此,如果有人恶意使用 您的 应用程序为所欲为,这不是您的问题,因为 您不想获得权限受限的服务帐户?我的意思是没有冒犯,但这样的态度就是为什么安全漏洞最终会导致如此多的数据泄露;因为应该关心的人不关心。
  • 听起来您的实例上没有数据库TesterDB,但我仍然建议您修复这些凭据。这里表达的对数据安全的态度真的很差。如果您受到 GDPR 的影响(我怀疑您没有),那么这种不良做法将被视为一个重要因素,作为应用程序开发人员,您负责确保您也拥有正确的工具;而sa 帐户是完全错误的工具。
  • 如果您无法控制,作为维护连接到数据库的应用程序的人,那么您需要联系确实有能力更改登录的人详细信息,并要求它发生。如果您对此不感兴趣,那么我很抱歉地说,但坦率地说,这只是疏忽,而且我不会雇用我的团队中对他们所涉及的应用程序有这种感觉的人。

标签: php sql-server apache


【解决方案1】:

查看列表:

  1. 在 MSSQL(属性/安全)上启用“通过 SQL 帐户登录”和“Windows 身份验证”
  2. 在属性菜单中启用“SA 帐户登录”
  3. 在防火墙上启用sql连接端口,(1433默认端口)或禁用防火墙仅用于测试
  4. 如果从其他网络连接,则启用与 MSSQL 的远程连接
  5. 通过分析器工具对连接进度进行故障排除

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2016-11-08
    • 2017-08-03
    相关资源
    最近更新 更多