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
相关产品推荐
相关产品推荐

