You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel连接SQL Server失败求助:执行migrate命令报错

Laravel连接SQL Server报错"目标机器主动拒绝连接"的排查方案

一、优先排查SQL Server基础配置(核心原因大概率在此)

  • 启用TCP/IP协议:
    打开「SQL Server配置管理器」→ 展开「SQL Server网络配置」→ 选择对应实例的「协议」→ 确保「TCP/IP」状态为「启用」,之后重启「SQL Server」服务(在系统服务列表中找到对应实例的服务)。
  • 确认SQL Server服务运行状态:
    按下Win+R输入services.msc打开服务列表,找到「SQL Server (MSSQLSERVER)」(若为命名实例,名称会是「SQL Server (你的实例名)」),确认状态为「正在运行」。
  • 验证1433端口可访问性:
    用PowerShell执行Test-NetConnection DESKTOP-1CGE50Q -Port 1433,若返回「TcpTestSucceeded : False」,说明端口不通:
    • 检查SQL Server监听端口:在SQL Server配置管理器的TCP/IP属性→「IP地址」标签,拉至最下方「IPAll」项,确认「TCP端口」设为1433。
    • 配置防火墙规则:打开「Windows Defender防火墙」→「高级设置」→「入站规则」,添加允许1433端口的规则,或直接允许「SQL Server」程序通过防火墙。

二、修正连接配置问题

1. Windows身份验证适配(你当前使用Windows用户名)

Laravel使用Windows身份验证连接SQL Server时,无需填写DB_USERNAME和DB_PASSWORD,需修改config/database.php中的sqlsrv连接配置:

'sqlsrv' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '1433'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', ''), // 留空
    'password' => env('DB_PASSWORD', ''), // 留空
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'trust_server_certificate' => true, // 解决证书验证报错
    'options' => [
        PDO::SQLSRV_ATTR_AUTHENTICATION => PDO::SQLSRV_AUTH_SSPI, // 启用Windows身份验证
    ],
],

修改后执行php artisan config:clear清除配置缓存,再尝试迁移命令。

2. 完善原生PHP连接测试

修改你的原生测试代码,添加错误输出以获取更详细的报错信息:

<?php 
$serverName = "DESKTOP-1CGE50Q, 1433"; 
$connectionInfo = array(
    "Database"=>"laravel_dev",
    "Authentication"=>SQLSRV_AUTH_SSPI // 启用Windows身份验证
); 
$conn = sqlsrv_connect( $serverName, $connectionInfo); 

if( $conn ) {
     echo "连接成功";
}else{
     echo "连接失败:<br>";
     print_r( sqlsrv_errors(), true);
}
?>

若原生代码仍报错,说明问题不在Laravel,需继续排查SQL Server的权限或网络配置。

三、其他排查点

  • 检查运行身份权限:
    • 命令行执行php artisan migrate时,当前登录的Windows用户需拥有laravel_dev数据库的访问权限。
    • IIS站点的应用池身份(默认是ApplicationPoolIdentity)需拥有SQL Server访问权限,可临时将应用池身份改为你的Windows账号(DESKTOP-1CGE50Q\Dell)测试。
  • 命名实例适配:
    若你的SQL Server是命名实例(如SQLEXPRESS),DB_HOST需改为DESKTOP-1CGE50Q\SQLEXPRESS,且端口可能不是1433,需在SQL Server配置管理器中查看对应实例的TCP端口。
  • 清除Laravel缓存:
    每次修改.env或config/database.php后,执行php artisan config:clear和php artisan cache:clear,确保新配置生效。

内容的提问来源于stack exchange,提问作者Jitendra Hengada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:01:18